Qt之自定义界面组件 一

devtools/2025/3/19 23:38:34/

通过qt中的painter绘图事件绘制一个电池电量图的变化。效果如下图

创建一个基于界面widget工程,在wdiget界面添加一个widget界面,将添加的widget界面的类提升为Tbattery.在Tbattery类中重写painEvent电池电量代码

文件目录结构

主要部分代码

//Tbattery.cpp
#include "tbattery.h"
#include<QPainter>
#include<QPaintEvent>
Tbattery::Tbattery(QWidget *parent): QWidget{parent}
{}int Tbattery::warningLevel() const
{return m_warningLevel;
}void Tbattery::setWarningLevel(int newWarningLevel)
{m_warningLevel=newWarningLevel;repaint();
}int Tbattery::powerLevel() const
{return m_powerLevel;
}void Tbattery::setPowerLevel(int newPowerLevel)
{m_powerLevel = newPowerLevel;repaint();
}void Tbattery::paintEvent(QPaintEvent *event)
{QPainter painter(this);QRect rect(0,0,width(),height());painter.setViewport(rect);//设置屏幕坐标painter.setWindow(0,0,120,50);//设置逻辑坐标painter.setRenderHint(QPainter::TextAntialiasing);painter.setRenderHint(QPainter::Antialiasing);QPen pen(colorBorder);pen.setWidth(1);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::FlatCap);pen.setJoinStyle(Qt::BevelJoin);painter.setPen(pen);QBrush brush(colorBackgroud);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);//绘制边框rect.setRect(1,1,109,48);painter.drawRect(rect);brush.setColor(colorBorder);painter.setBrush(brush);rect.setRect(110,15,10,20);painter.drawRect(rect);if(m_powerLevel>m_warningLevel){brush.setColor(colorPower);pen.setColor(colorPower);}else{brush.setColor(colorWarning);pen.setColor(colorWarning);}painter.setPen(pen);painter.setBrush(brush);if(m_powerLevel>0){rect.setRect(5,5,m_powerLevel,40);painter.drawRect(rect);}QString powStr=QString::asprintf("%d%%",m_powerLevel);QFontMetrics textSize(this->font());QRect textRect=textSize.boundingRect(powStr);painter.setFont(this->font());pen.setColor(colorBorder);painter.setPen(pen);painter.drawText(55-textRect.width()/2,25+textRect.height()/2,powStr);event->accept();
}
//Tbattery.h/#ifndef TBATTERY_H
#define TBATTERY_H#include <QWidget>class Tbattery : public QWidget
{Q_OBJECT
public:explicit Tbattery(QWidget *parent = nullptr);int warningLevel() const;void setWarningLevel(int newWarningLevel);int powerLevel() const;void setPowerLevel(int newPowerLevel);private:QColor colorBackgroud=Qt::white;QColor colorBorder=Qt::black;QColor colorPower=Qt::green;QColor colorWarning=Qt::red;int m_powerLevel  = 60;int m_warningLevel = 20;signals:// QWidget interface
protected:virtual void paintEvent(QPaintEvent *event) override;
};#endif // TBATTERY_H


http://www.ppmy.cn/devtools/168476.html

相关文章

【eNSP实战】使用ACL实现路由器安全

拓图 要求&#xff1a; 允许 10.0.0.0 网段 telent 登录AR1&#xff0c;不允许其他主机telnet登录路由器设置接口如图所示 AR1接口配置 interface GigabitEthernet0/0/0ip address 30.0.0.1 255.255.255.0 # ip route-static 0.0.0.0 0.0.0.0 30.0.0.2AR2接口配置 interf…

使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法

使用DeepSeek和墨刀AI&#xff0c;写PRD文档、画原型图的思路、过程及方法 现在PRD文档要如何写更高效、更清晰、更完整&#xff1f; 还是按以前的思路写PRD&#xff0c;就还是以前的样子。 现在AI这么强大&#xff0c;产品经理如何使用DeepSeek写PRD文档&#xff0c;产品经…

沐数科技数据开发岗笔试题2025

描述性统计 标准差 答案: A 解析: 标准差 衡量数据集中数值变化或离散程度的一种度量。它反映了数据集中的各个数值与数据集的平均值&#xff08;均值&#xff09;之间的偏离程度。标准差越大&#xff0c;表明数据的分布越分散&#xff1b;标准差越小&#xff0c;表明数据…

springBoot中不添加依赖 , 手动生成一个token ,并校验token (使用简单 , 但是安全会低一点)

在 Spring Boot 里&#xff0c;即便不添加额外依赖&#xff0c;也能手动生成和校验 Token。下面以简单的基于时间戳和密钥的方式来生成和校验 Token 为例&#xff0c;介绍具体实现步骤。 实现思路 生成 Token&#xff1a;把用户信息、时间戳等数据组合起来&#xff0c;再用密…

Matlab 单球机器人动力学与LQR控制研究

1、内容简介 Matlab 179-单球机器人动力学与LQR控制研究 可以交流、咨询、答疑 2、内容说明 略单球机器人是一种本征不稳定的动平衡机器人&#xff0c;它与地面单点接触&#xff0c;运动灵活&#xff0c;同时具有多变量、高度非线性、时变等特点&#xff0c;近年来成为轮式机…

Spring中的循环依赖问题是什么?

在使用Spring框架进行开发时&#xff0c;可能会遇到一个比较棘手的问题&#xff0c;那就是循环依赖。说到循环依赖&#xff0c;很多人可能会感到有些困惑&#xff0c;难道这个问题真的有那么复杂吗&#xff1f;其实&#xff0c;理解循环依赖并不是很难。我们可以从Spring的依赖…

spring boot3 kafka集群搭建到使用

首先自行安装docker&#xff0c;通过docker容器安装kafka CentOS 系统 docker安装地址 1.pom.xml和application.properties或者application.yml文件配置 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</arti…

DataWhale大语言模型-大模型技术基础

DataWhale大语言模型-大模型技术基础 什么是大语言模型预训练和后训练之间的对比大模型预训练(Pre-training)大语言模型后训练(Post-Training)指令微调(Instruction Tuning)人类对齐(Human Alignment) 扩展定律KM扩展定律Chinchilla扩展定律深入讨论 涌现能力代表性能力指令遵循…