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
#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;
}
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;
}