当前位置: 首页 > news >正文

qt5实现表盘的旋转效果,通过提升QLabel类

因为工作需要,需要实现温度的表盘展示效果

实现思路:

   通过提示声QLabel控价类,实现报盘的旋转和展示效果

1. 编写一个QLabel的类MyQLabel,实现两个方法

   1.  void paintEvent(QPaintEvent *event); //重绘函数

   2.  void valueChanged(int value); //更改值

2.提升QLabel控件,实现两个方法函数的重置入

3. 通过按钮和滑动条,改变数值,实现指针的转动调整指针的指向

实现表盘转动的功能。

myqlabel.h

#ifndef MYQLABEL_H

#define MYQLABEL_H

#include <QObject>

#include <QLabel>

#include <QPainter>

class MyQLabel : public QLabel

{

Q_OBJECT

public:

QPixmap needle; //指针

QPixmap overlay; //中间显示盘

QPixmap img; //显示转盘

int nvalue;

explicit MyQLabel(QWidget *parent=0);

void paintEvent(QPaintEvent *event); //重绘函数

void valueChanged(int value); //更改值

//void DrawRangle(int x ,int y ,int h,int w); //绘制矩形

};

#endif // MYQLABEL_H

2. myqlabel.c文件内容
#include "myqlabel.h"
#include <QDebug>
MyQLabel::MyQLabel(QWidget *parent): QLabel(parent)
{
    needle = QPixmap(":/image/ned.png");
    overlay= QPixmap(":/image/lay.png");
    img = QPixmap(":/image/img.png");
    nvalue=-128;
}
void MyQLabel::valueChanged(int value)
{
        nvalue = value;
        this->update();
}
void MyQLabel::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.save();//保存
    painter.setRenderHint(QPainter::SmoothPixmapTransform, true); //平滑像素图,防止图形走样
    painter.translate(this->width() / 2,this->height() / 2); // 原点定位在中间位置
    qDebug()<<"1.width:"<<this->width()/2 <<"height:"<<this->height()/2 <<endl;
    painter.drawPixmap(-img.width()/2, -img.height() / 2, img);   // 背景图
    qDebug()<<"2.width:"<<img.width() <<"height:"<<img.height() <<endl;// 指针图
    painter.restore();//恢复
    painter.translate(this->width() / 2,this->height()/8*5); // 原点定位在中间位置
    qDebug()<<"3.定位点.width:"<<this->width() / 2 <<"height:"<<this->height() /8*5<<endl;
    painter.rotate(nvalue);//设置旋转角度
    painter.drawPixmap(-needle.width() / 2, -needle.height() + needle.width() / 2, needle);         //原点图
    painter.drawPixmap(-overlay.width() / 2, -overlay.height()/2 , overlay);
    painter.restore();//恢复
}

3. widget.h 文件

#include <QWidget>

#include <QPaintDevice>

#include <QPainter>

#include <QPaintEvent>

#include <QPixmap>

#include <QInputDialog>

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

Q_OBJECT

public:

explicit Widget(QWidget *parent = 0);

~Widget();

private slots:

void on_pushButton_clicked();

void on_slider_valueChanged(int value);

private:

 Ui::Widget *ui;

};

#endif // WIDGET_H

4. widget.cpp

#include "ui_widget.h"

#include <QDebug>

#include <QLabel>

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)

{

      ui->setupUi(this);

     resize(600,600); //设置窗体大小

}

//析构函数

Widget::~Widget()

{

delete ui;

}

void Widget::on_pushButton_clicked()

{

int evalue=QInputDialog::getInt(this,tr("输入温度数值"),tr("请输入一个对应的温度值"),0,-128,128,1);

ui->label->valueChanged(evalue);

}

//值变化时

void Widget::on_slider_valueChanged(int value)

{

qDebug()<<"value="<<value<<endl;

ui->label->valueChanged(value);

}

5. main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

Widget w;

w.show();

return a.exec();

}

6. widget.ui

这个界面中放置一个QLabel控价,到时提升下控件即可

最终实现效果如下

相关文章:

  • 深入解析:在Spring Boot中集成MyBatis Plus实现高效数据库操作
  • 欢乐力扣:同构字符串
  • antv G6绘制流程图
  • 网络运维学习笔记 019 HCIA-Datacom综合实验03
  • 各种硬件模块
  • lattice hdl实现spi接口
  • RoCEv2 高性能传输协议与 Lossless 无损网络
  • 深入理解设计模式之代理模式
  • 基于 DeepSeek + Gemeni 打造 AI+前端的多人聊天室
  • Ollama 部署大模型
  • Java 集合:单列集合和双列集合的深度剖析
  • 基于Flask的去哪儿网海南旅游攻略数据分析系统的设计与实现
  • 2025吐槽季第一弹---腾讯云EO边缘安全加速平台服务
  • Graspness Discovery in Clutters for Fast and Accurate Grasp Detection 解读
  • RoCBert:具有多模态对比预训练的健壮中文BERT
  • 细说STM32F407单片机2个ADC使用DMA同步采集各自的1个输入通道的方法
  • 【开源免费】基于SpringBoot+Vue.JS物流管理系统(JAVA毕业设计)
  • 如何把虚拟机拷贝到另一台VMware里?
  • mysql之MySQL 优化器追踪 (Optimizer Trace):洞察优化器决策的每一个细节
  • 联通用户管理系统(二)
  • 李云泽:房地产“白名单”贷款审批通过金额增至6.7万亿元
  • 机器人助力、入境游、演出引流:假期纳客千万人次城市有高招
  • 一季度全国30强城市出炉:谁能更进一步?谁掉队了?
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高
  • 罗马尼亚总理乔拉库宣布辞职
  • 塞尔维亚总统因突发健康问题,中断对美国的正式访问并回国