当前位置: 首页 > 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控价,到时提升下控件即可

最终实现效果如下

http://www.dtcms.com/a/32744.html

相关文章:

  • 深入解析:在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):洞察优化器决策的每一个细节
  • 联通用户管理系统(二)
  • 基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 软件架构设计:网络基础
  • 计算机网络————(一)HTTP讲解
  • 百度搜索,能否将DeepSeek变成“内功”?
  • 【Linux】:应用层协议 HTTP (超文本传输协议)
  • 和平之翼代码生成器 SHCEU 版 4.0.0RC6 千年隼介绍二
  • 深入理解C语言中的位段
  • 【Linux】匿名管道的应用场景-----管道进程池
  • 基于深度学习的信号滤波:创新技术与应用挑战
  • 基于SpringBoot+vue+uniapp的智慧旅游小程序+LW示例参考