Qt 绘制仪表盘

来源:互联网 发布:天银网络 编辑:程序博客网 时间:2024/05/29 16:42

1. 首先准备素材,一个表盘,一个指针
这里写图片描述
这里写图片描述



2. 计算旋转圆心及转动角度
通过画图软件测量一下表盘中心的坐标,及指针中心的坐标
这里写图片描述
大概表盘的中心为(163,163),同样指针的中心位置为(14,110)
转动角度可以大概测量一下,应该为(-120,120)度



3. 转动操作
有了这些数据就可以来绘制表盘了

//设置表盘的中心#define CenterPoint_X  163#define CenterPoint_Y  163//设置指针的中心,注意这里是负的,因为一会我们要平移坐标系#define NeedleCenter_X     -14   //#define NeedleCenter_Y     -110//指针图片的宽度和高度#define NeedlePic_W         28#define NeedlePic_H         123//指针可以活动的最小最大值#define Needle_MinAngle    -120#define Needle_MaxAngle     120//每一次Qt刷新,指针改变的的度数#define Needle_Step         1//初始化SPDWidget::SPDWidget(QWidget *parent) :    QWidget(parent){    this->resize(320, 320);    pix_Needle.load("./res/style_1/needle.png");    d_Pointer_angle_now = Needle_MinAngle;   //start angle}//画图void SPDWidget::paintEvent(QPaintEvent  *event){    //每次调用这个函数,改变角度值    set_angle();    QPainter painter(this);    painter.setRenderHint(QPainter::Antialiasing, true);    painter.setRenderHint(QPainter::SmoothPixmapTransform);    //-----------------------------------------    painter.save();    //设置新的圆心,其实也是旋转中心    painter.translate(CenterPoint_X, CenterPoint_Y);       //旋转一个角度    painter.rotate(d_Pointer_angle_now);    //画指针,注意是在指针中心的反方向开始画    painter.drawPixmap(NeedleCenter_X, NeedleCenter_Y,                       NeedlePic_W, NeedlePic_H,                       pix_Needle);    //使原点复原    painter.restore();}//测试函数,在最小与最大范围之间摆动void SPDWidget::set_angle(){    static int iDirection = 1;    if (d_Pointer_angle_now >= Needle_MaxAngle)    {        iDirection = -1;    }    else if (d_Pointer_angle_now <= Needle_MinAngle)    {        iDirection = 1;    }    //每次改变的角度值    d_Pointer_angle_now = d_Pointer_angle_now + iDirection * Needle_Step;}
1 0
原创粉丝点击