Qt滑动条控制仪表指针转动

转自:https://blog.csdn.net/lwbeyond/article/details/62969283
增加了滑动条控制功能,但是使用update()强制刷新界面后,电脑CPU达到25%,耗费大资源,未能解决!
在这里插入图片描述

.h文件
#ifndef WIDGET_H
#define WIDGET_H

#include
#include

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

void paintEvent(QPaintEvent  *event);

public slots:
void set_angle();

private:
Ui::Widget *ui;

QPixmap pix_Needle;

int d_Pointer_angle_now;

QTimer *timer;

};

#endif // WIDGET_H

.cpp文件
/*

  • 滑动条控制仪表指针扫动
  • 增加了滑动条控制功能,但是使用update()强制刷新界面后,电脑CPU达到25%,耗费大资源,未能解决!
    */

#include “widget.h”
#include “ui_widget.h”

#include
#include

//设置表盘的中心
#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

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);

this->resize(400, 400); //开始显示的窗口大小
pix_Needle.load("C:\\Qt\\text\\text5\\image\\22.png");

d_Pointer_angle_now = Needle_MinAngle;   //start angle

timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
//timer->start(10);

connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(set_angle()));

}

Widget::~Widget()
{
delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
//每次调用这个函数,改变角度值
//set_angle();

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setRenderHint(QPainter::SmoothPixmapTransform);

painter.drawPixmap(0,0,320,319,QPixmap("C:\\Qt\\text\\text4_3\\image\\11.png"));

//-----------------------------------------
painter.save();
//设置新的圆心,其实也是旋转中心
painter.translate(CenterPoint_X, CenterPoint_Y);
//旋转一个角度
painter.rotate( d_Pointer_angle_now );
qDebug() << "d_Pointer_angle_now::" << d_Pointer_angle_now;
//画指针,注意是在指针中心的反方向开始画
painter.drawPixmap(NeedleCenter_X, NeedleCenter_Y,
                   NeedlePic_W, NeedlePic_H,
                   pix_Needle);
//使原点复原
painter.restore();
//update(); //强制刷新

}

//测试函数,在最小与最大范围之间摆动
void Widget::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;
// }

int num = ui->horizontalSlider->value();
QString str = QString( "%1" ).arg( num );
d_Pointer_angle_now = str.toInt();

  //每次改变的角度值
  //d_Pointer_angle_now = d_Pointer_angle_now + iDirection * Needle_Step;

}

发布了12 篇原创文章 · 获赞 3 · 访问量 1463
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览