Qt 绘制仪表盘

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;

}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值