Qt之雷达扫描动画实现
由于qtresmonitor项目需要,我重新设计了UI(雷达扫描动画)并用了一个下午实现。
基本思路就是用QPainter绘制线条,用QConicalGradient绘制角度渐变色
传到github上的代码没有加注释,在这加一下
//draw a radar
QPainter painter_horizon(this);
painter_horizon.setPengreen);//设置画笔颜色
//m_dpi是为了适配不同大小的屏幕的一个修正值
QConicalGradient conicalGradient(50 * m_dpi,50 * m_dpi,180.0 - m_Angle);//设置角度渐变色的圆心和起始位置(3点钟方向为0度,顺时针为负角度,逆时针为正角度,-180度至+180度)
conicalGradient.setColorAtgreen;//设置角度渐变色的起始颜色
conicalGradient.setColorAt(1.0,QColor(255,255,255,0));//设置角度渐变色的终点颜色
painter_horizon.setBrush(QBrush(conicalGradient));//设置渐变色的画刷
painter_horizon.drawEllipse(0 * m_dpi,0 * m_dpi,100 * m_dpi,100 * m_dpi);//画出该渐变色效果,同时画出雷达图外圆
QPainter painter(this);//另一只画笔
painter.setPengreen);//设置画笔颜色
painter.drawLine(0,50 * m_dpi,100 * m_dpi,50 * m_dpi);//画出十字线之横
painter.drawLine(50 * m_dpi,0,50 * m_dpi,100 * m_dpi);//画出十字线之竖
painter.drawEllipse(20 * m_dpi,20 * m_dpi,60 * m_dpi,60 * m_dpi);//画出雷达图内圆
效果如下,使用GifCam截图生成gif,只有选择灰度生成的gif才比较清晰,因此图上是灰色,但是实际代码效果是绿色
[
另,图中出现的折线效果另有代码实现