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.rhkb.cn/news/23300.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode settings(一):全局| 用户设置常用的设置项

参考资料 Visual Studio Code权威指南 by 韩骏 一. 全局设置与用户设置 1.1 Vscode支持两种不同范围的设置 用户设置(User Settings)&#xff1a;这是一个全局范围的设置&#xff0c;会应用到所有的Visual Studio Code实例中。工作区设置(Workspace Settings)&#xff1a;设…

C# 将非托管Dll嵌入exe中(一种实现方法)

一、环境准备 电脑系统&#xff1a;Windows 10 专业版 20H2 IDE&#xff1a;Microsoft Visual Studio Professional 2022 (64 位) - Current 版本 17.11.4 其他&#xff1a; 二、测试目的 将基于C创建DLL库&#xff0c;封装到C#生成的exe中。 一般C创建的库&#xff0c;在…

在 Mac mini M2 上使用Docker快速部署MaxKB:打造本地知识库问答系统

随着大语言模型的广泛应用&#xff0c;知识库问答系统逐渐成为提升工作效率和个人学习的有力工具。MaxKB是一款基于LLM&#xff08;Large Language Model&#xff09;大语言模型的知识库问答系统&#xff0c;支持多模型对接、文档上传和自动爬取等功能。本文将详细介绍如何在Ma…

Jenkins上无法查看已成功生成的Junit报告

如果你已确认 JUnit 报告在工作空间中被成功生成&#xff0c;但在 Jenkins 构建页面上却看不到 "Test Result" 或 "Test Report" 的链接&#xff0c;这通常意味着 Jenkins 没有正确地配置用来处理和显示这些报告的步骤。这里有几个可能的原因和解决方法&am…

vue+element-plus简洁完美实现淘宝网站模板

目录 一、项目介绍 二、项目截图 1.项目结构图 2.首页 3.详情 4.购物车 5.登陆页 三、源码实现 1.路由配置 2.依赖包 四、总结 一、项目介绍 项目在线预览&#xff1a;点击访问 本项目为vue项目&#xff0c;参考淘宝官方样式为主题来设计元素&#xff0c;简洁美观&…

stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)

简介: 这个小车的芯片是STM32F103C8T6&#xff0c;其他的芯片也可以照猫画虎,基本配置差不多,要注意的就是,管脚复用,管脚的特殊功能,(这点不用担心,hal库每个管脚的功能都会给你罗列,很方便的.)由于我做的比较简单,只是用到了几个简单外设.主要是由带霍尔编码器电机的车模,电机…

红队内网攻防渗透:内网渗透之内网对抗:实战项目VPC2打靶父子域三层路由某绒免杀下载突破约束委派域控提权

红队内网攻防渗透 实战网络攻防靶场记录1.靶机配置信息讲解2.靶场渗透完整流程2.1 入口点:192.168.139.130(win2008 R2)2.1.1 tomcat后台war包获取权限2.1.2 tomcat使用后门上线CS平台2.1.3 信息收集获取数据库密码2.2 入口点横向:192.168.10.11 (win2012 SQL)2.2.1 SQLs…

C语言【指针篇】(一)

前言 指针基础概念理解&#xff0c;从底层出发理解指针 C语言【指针篇】&#xff08;一&#xff09; 前言正文1. 内存和地址1.1 内存1.2 究竟该如何理解编址 2. 指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引用操作符(*)2.3 指针变量的大小 3. 指针变量类型的意义…

【每日八股】Redis篇(二):数据结构

Redis 数据类型&#xff1f; 主要有 STRING、LIST、ZSET、SET 和 HASH。 STRING String 类型底层的数据结构实现主要是 SDS&#xff08;简单动态字符串&#xff09;&#xff0c;其主要应用场景包括&#xff1a; 缓存对象&#xff1a;可以用 STRING 缓存整个对象的 JSON&…

文章精读篇——用于遥感小样本语义分割的可学习Prompt

题目&#xff1a;Learnable Prompt for Few-Shot Semantic Segmentation in Remote Sensing Domain 会议&#xff1a;CVPR 2024 Workshop 论文&#xff1a;10.48550/arXiv.2404.10307 相关竞赛&#xff1a;https://codalab.lisn.upsaclay.fr/competitions/17568 年份&#…

游戏引擎学习第119天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾和今天的议程 如果你们还记得昨天的进展&#xff0c;我们刚刚完成了优化工作&#xff0c;目标是让某个程序能够尽可能快速地运行。我觉得现在可以说它已经快速运行了。虽然可能还没有达到最快的速度&#xff0c;但我们…

HybridCLR+Adressable+Springboot热更

本文章会手把手教大家如何搭建HybridCLRAdressableSpringboot热更。 创作不易&#xff0c;动动发财的小手点个赞。 安装华佗 首先我们按照官网的快速上手指南搭建一个简易的项目&#xff1a; 快速上手 | HybridCLR 注意在热更的代码里添加程序集。把用到的工具放到程序集里…

多无人机协同路径规划(论文+仿真)

在现代技术的快速发展下&#xff0c;飞行器的种类也越来越多了&#xff0c;他们的应用场景和应用功能也越来越完善和复杂。举例来说&#xff0c;ps-x625型号就是大疆无人机生产的就是在植物保护方面有很好的应用&#xff0c;宝鸡的兴义生产的X8型号无人机在航空领域有很大突破&…

CentOS环境变量配置+解析

环境变量的作用就是让系统快速通过你的命令找到你的可执行程序&#xff0c;windows系统里也同理&#xff0c;也就是你每次输入个命令&#xff0c;系统就会找环境变量里到底有没有叫这个命令进程的 一、环境变量配置 1.编辑配置文件 vim /etc/profile export PATH$PATH:$JAVA…

einops测试

文章目录 1. einops2. code3. pytorch 1. einops einops 主要是通过爱因斯坦标记法来处理张量矩阵的库&#xff0c;让矩阵处理上非常简单。 conda : conda install conda-forge::einopspython: 2. code import torch import torch.nn as nn import torch.nn.functional as…

Unity教程(二十一)技能系统 基础部分

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

Docker:Docker从入门到精通(一)- Docker简介

一、前言 通过本专栏的学习&#xff0c;我们将了解   1. 掌握Docker基础知识&#xff0c;能够理解Docker镜像与容器的概念   2. 完成Docker安装与启动   3. 掌握Docker镜像与容器相关命令   4. 掌握Tomcat Nginx 等软件的常用应用的安装   5. 掌握docker迁移与备份相…

单机上使用docker搭建minio集群

单机上使用docker搭建minio集群 1.集群安装1.1前提条件1.2步骤指南1.2.1安装 Docker 和 Docker Compose&#xff08;如果尚未安装&#xff09;1.2.2编写docker-compose文件1.2.3启动1.2.4访问 2.使用2.1 mc客户端安装2.2创建一个连接2.3简单使用下 这里在ubuntu上单机安装一个m…

Image Downloader下载文章图片的WordPress插件

源码介绍 一个用于下载图片的WordPress插件&#xff0c;包含下载统计功能&#xff0c;支持任何主题使用 用户点击下载后自动打包该文章所有原始图片&#xff0c;并把文章标题作为压缩包的文件名。 不占用服务器空间&#xff0c;也不占网盘空间&#xff0c;直接利用浏览器的性…

PLC通讯

PPI通讯 是西门子公司专为s7-200系列plc开发的通讯协议。内置于s7-200 CPU中。PPI协议物理上基于RS-485口&#xff0c;通过屏蔽双绞线就可以实现PPI通讯。PPI协议是一种主-从协议。主站设备发送要求到从站设备&#xff0c;从站设备响应&#xff0c;从站不能主动发出信息。主站…