您的位置:首页 > 编程语言 > Qt开发

Qt 绘制仪表盘

2017-09-16 20:42 351 查看
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::Antialiasin
4000
g, 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息