Qt繪制電池圖標源碼分享

一、效果展示

在這里插入圖片描述

二、源碼分享

cell.h

#ifndef CELL_WIDGET_H
#define CELL_WIDGET_H
#include <QWidget>
#include <QPainter>
#include <QPaintEngine>
#include <QPaintEvent>/* 電池控件類 */
class CellWidget : public QWidget
{Q_OBJECTQ_PROPERTY(QColor colorBackground READ getColorBackground WRITE setColorBackground NOTIFY colorBackgroundChanged)Q_PROPERTY(QColor colorBorder READ getColorBorder WRITE setColorBorder NOTIFY colorBorderChanged)Q_PROPERTY(QColor colorPower READ getColorPower WRITE setColorPower NOTIFY colorPowerChanged)Q_PROPERTY(QColor colorWarn READ getColorWarn WRITE setColorWarn NOTIFY colorWarnChanged)Q_PROPERTY(int powerMax READ getPowerMax WRITE setPowerMax NOTIFY powerMaxChanged)Q_PROPERTY(int powerNow READ getPowerNow WRITE setPowerNow NOTIFY powerNowChanged)Q_PROPERTY(int powerWarn READ getPowerWarn WRITE setPowerWarn NOTIFY powerWarnChanged)public:CellWidget(QWidget *parent = 0);QColor getColorBackground() const {return m_colorBackground;}QColor getColorBorder() const { return m_colorBorder; }QColor getColorPower() const { return m_colorPower; }QColor getColorWarn() const { return m_colorWarn; }int getPowerMax() const { return m_powerMax; }int getPowerNow() const { return m_powerNow; }int getPowerWarn() const { return m_powerWarn; }public slots:void setColorBackground(QColor colorBackground) { m_colorBackground = colorBackground; update(); emit colorBackgroundChanged(m_colorBackground); }void setColorBorder(QColor colorBorder) { m_colorBorder = colorBorder; update(); emit colorBorderChanged(m_colorBorder); }void setColorPower(QColor colorPower) { m_colorPower = colorPower; update(); emit colorPowerChanged(m_colorPower); }void setColorWarn(QColor colorWarn) { m_colorWarn = colorWarn; update(); emit colorWarnChanged(m_colorWarn); }void setPowerMax(int powerMax) { m_powerMax = powerMax; update(); emit powerMaxChanged(m_powerMax); }void setPowerNow(int powerNow) { m_powerNow = powerNow; update(); emit powerNowChanged(m_powerNow); }void setPowerWarn(int powerWarn) { m_powerWarn = powerWarn; update(); emit powerWarnChanged(m_powerWarn); }signals:void colorBackgroundChanged(QColor colorBackground);void colorBorderChanged(QColor colorBorder);void colorPowerChanged(QColor colorPower);void colorWarnChanged(QColor colorWarn);void powerMaxChanged(int powerMax);void powerNowChanged(int powerNow);void powerWarnChanged(int powerWarn);protected:void paintEvent(QPaintEvent *event);private:QColor m_colorBackground;           //背景顏色QColor m_colorBorder;               //邊框顏色QColor m_colorPower;                //正常電量顏色QColor m_colorWarn;                 //警告電量顏色int m_powerNow;                     //當前電量值int m_powerMax;                     //最大電量值int m_powerWarn;                    //警告電量值
};#endif // CELL_H

cell.cpp

#include "cellWidget.h"
#include <QPainter>
#include <QPen>
#include <QColor>
#include <QDebug>/** 構造函數*/
CellWidget::CellWidget(QWidget *parent) :QWidget(parent)
{m_colorBackground = Qt::white;m_colorBorder = Qt::black;m_colorPower = Qt::green;m_colorWarn = Qt::red;m_powerMax = 4200;m_powerNow = 3800;m_powerWarn = 3500;
}/**  重繪事件*/
void CellWidget::paintEvent(QPaintEvent *event)
{(void)event;QPainter painter(this);QRect rect(0, 0, width(), height());/* 設置視口和邏輯坐標系 */painter.setViewport(rect);painter.setWindow(0, 0, 50, 120);/* 抗鋸齒效果 */painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);/* 設置畫筆和畫刷 */QPen pen;pen.setWidth(2);pen.setColor(m_colorBorder);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::FlatCap);pen.setJoinStyle(Qt::BevelJoin);painter.setPen(pen);/* 繪制電池輪廓和背景 */QBrush brush;brush.setStyle(Qt::SolidPattern);//電池方形部分brush.setColor(m_colorBackground);painter.setBrush(brush);rect.setRect(1, 11, 48, 109);painter.drawRect(rect);//電池頭部分brush.setColor(m_colorBorder);painter.setBrush(brush);rect.setRect(15, 1, 20, 9);painter.drawRect(rect);/* 繪制電池電量 */if(m_powerNow > m_powerWarn){brush.setColor(m_colorPower);pen.setColor(m_colorPower);}else{brush.setColor(m_colorWarn);pen.setColor(m_colorWarn);}pen.setWidth(1);painter.setPen(pen);painter.setBrush(brush);if(m_powerNow > 0){qreal powerStartY, powerStopY;qreal powerNowPercent = m_powerNow * 1.0 / m_powerMax * 100;if(powerNowPercent > 100) powerNowPercent = 100;if(powerNowPercent < 0) powerNowPercent = 0;powerStartY = (100 - powerNowPercent) + 14;powerStopY = 120 - powerStartY - 2;rect.setRect(3, powerStartY, 44, powerStopY);painter.drawRect(rect);}/* 數值顯示 */QFontMetrics textsize(this->font());QString powStr = QString::number(m_powerNow);QRect textRect = textsize.boundingRect(powStr);painter.setFont(this->font());pen.setColor(Qt::black);painter.setPen(pen);painter.drawText(24-textRect.width()/2, 55+textRect.height()/2, powStr);
}

三、使用方法

放置一個QWidget,然后右鍵提升
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84529.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84529.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安卓基礎(生成APK)

??生成調試版&#xff08;Debug&#xff09;?? Build → Build Bundle(s)/APK(s) → Build APK輸出路徑&#xff1a;app/build/outputs/apk/debug/app-debug.apk ??生成發布版&#xff08;Release&#xff09;?? Build → Generate Signed Bundle/APK → 選擇 ??APK?…

如何在 TypeScript 中使用類型保護

前言 類型保護是一種 TypeScript 技術&#xff0c;用于獲取變量類型的信息&#xff0c;通常用于條件塊中。類型保護是返回布爾值的常規函數??&#xff0c;它接受一個類型并告知 TypeScript 是否可以將其縮小到更具體的值。類型保護具有獨特的屬性&#xff0c;可以根據返回的…

山東大學軟件學院項目實訓-基于大模型的模擬面試系統-面試對話標題自動總結

面試對話標題自動總結 主要實現思路&#xff1a;每當AI回復用戶之后&#xff0c;調用方法查看當前對話是否大于三條&#xff0c;如果大于則將用戶的兩條和AI回復的一條對話傳給DeepSeek讓其進行總結&#xff08;后端&#xff09;&#xff0c;總結后調用updateChatTopic進行更新…

Spring Cloud與Alibaba微服務架構全解析

Spring Cloud與Spring Cloud Alibaba微服務架構解析 1. Spring Boot概念 Spring Boot并不是新技術&#xff0c;而是基于Spring框架下“約定優于配置”理念的產物。它幫助開發者更容易、更快速地創建獨立運行和產品級別的基于Spring框架的應用。Spring Boot中并沒有引入新技術…

AI 賦能 Java 開發:從通宵達旦到高效交付的蛻變之路

作為一名深耕 Java 開發領域多年的從業者&#xff0c;相信很多同行都與我有過相似的經歷&#xff1a;在 “996” 甚至 “007” 的高壓模式下&#xff0c;被反復修改的需求、復雜的架構設計、無休止的代碼編寫&#xff0c;以及部署時層出不窮的問題折磨得疲憊不堪。長期以來&…

06. C#入門系列【自定義類型】:從青銅到王者的進階之路

C#入門系列【自定義類型】&#xff1a;從青銅到王者的進階之路 一、引言&#xff1a;為什么需要自定義類型&#xff1f; 在C#的世界里&#xff0c;系統自帶的類型&#xff08;如int、string、bool&#xff09;就像是基礎武器&#xff0c;能解決一些簡單問題。但當你面對復雜的…

使用 PyTorch 和 TensorBoard 實時可視化模型訓練

在這個教程中&#xff0c;我們將使用 PyTorch 訓練一個簡單的多層感知機&#xff08;MLP&#xff09;模型來解決 MNIST 手寫數字分類問題&#xff0c;并且使用 TensorBoard 來可視化訓練過程中的不同信息&#xff0c;如損失、準確度、圖像、參數分布和學習率變化。 步驟 1&…

第十五章 15.OSPF(CCNA)

第十五章 15.OSPF(CCNA) 介紹了大家都能用的OSPF動態路由協議 注釋&#xff1a; 學習資源是B站的CCNA by Sean_Ning CCNA 最新CCNA 200-301 視頻教程(含免費實驗環境&#xff09; PS&#xff1a;喜歡的可以去買下他的課程&#xff0c;不貴&#xff0c;講的很細 To be cont…

手機連接windows遇到的問題及解決方法

文章目錄 寫在前面一、手機與windows 連接以后 無法在win端打開手機屏幕,提示801方法零、檢查連接方法一、系統修復方法二、斷開重連方法三、軟件更新方法四、關閉防火墻 寫在前面 本文主要記錄所遇到的問題以及解決方案&#xff0c;以備后用。 所用機型&#xff1a;win11 專業…

Spring Boot + MyBatis Plus 項目中,entity和 XML 映射文件的查找機制

在 Spring Boot MyBatis - Plus 項目中&#xff0c;entity&#xff08;實體類&#xff09;和 XML 映射文件的查找機制有其默認規則&#xff0c;也可通過配置調整&#xff0c;以下詳細說明&#xff1a; 一、實體類&#xff08;entity&#xff09;的查找 MyBatis - Plus 能找到…

itvbox綠豆影視tvbox手機版影視APP源碼分享搭建教程

我們先來看看今天的主題&#xff0c;tvbox手機版&#xff0c;然后再看看如何搭建&#xff1a; 很多愛好者都希望搭建自己的影視平臺&#xff0c;那該如何搭建呢&#xff1f; 后端開發環境&#xff1a; 1.易如意后臺管理優化版源碼&#xff1b; 2.寶塔面板&#xff1b; 3.ph…

Vue Electron 使用來給若依系統打包成exe程序,出現登錄成功但是不跳轉頁面(已解決)

描述 用vue打成electron可執行exe程序時&#xff0c;發現個問題&#xff0c;一直登錄之后&#xff0c;頁面跳轉不了&#xff0c;其實后臺請求已成功發送 那么懷疑就是vue頁面跳轉的事情 解決 大部分vue 前段項目 會使用 js-cookie 這個庫 來操作瀏覽器的cookie 然而這個庫 …

Blob設置type為application/msword將document DOM節點轉換為Word(.doc,.docx),并下載到本地

core code // 導出為Word文檔downloadWord({ dom, fileName "", fileType "doc", l {} } {}) {l.show && l.show();// 獲取HTML內容const content dom.innerHTML;// 構建Word文檔的HTML結構const html <!DOCTYPE html><html>&l…

無需 Mac,使用Appuploader簡化iOS上架流程

作為開發者&#xff0c;尤其是從事跨平臺開發的團隊&#xff0c;iOS應用上架一直是一項繁瑣且挑戰重重的工作。盡管Flutter、React Native等框架使得我們可以在不同平臺之間共享代碼&#xff0c;iOS上架仍然是一個不可忽視的難題。因為它不僅僅涉及代碼構建&#xff0c;還涉及到…

【JVM】Java虛擬機(二)——垃圾回收

目錄 一、如何判斷對象可以回收 &#xff08;一&#xff09;引用計數法 &#xff08;二&#xff09;可達性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;標記清除 &#xff08;二&#xff09;標記整理 &#xff08;三&#xff09;復制 &#xff08;四&#xff…

Android 實現可拖動的ImageView

Android 實現可拖動的ImageView 代碼實現&#xff1a; public class DraggableImageView extends AppCompatImageView {private float lastTouchX;private float lastTouchY;public DraggableImageView(Context context) {super(context);init();}public DraggableImageView(C…

微信小程序中wxs

一、先新建wxs文件subutil.wxs 1、寫過濾器 //return class var isClass function(val) {if (val 0) {return grid-item} else if (val 1) {return temperature-error-slot} else if (val 2) {return chargingCycles-error-slot} else {return unrecognized-slot} } 2、…

Nginx攻略

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&#…

常見系統設計

秒殺系統 前端層&#xff1a; 靜態資源緩存&#xff1a;通過CDN緩存商品圖片、頁面靜態HTML&#xff0c;減少回源請求。 請求合并&#xff1a;合并用戶頻繁刷新的請求&#xff08;如10秒內僅允許一次真實請求&#xff09;。 端側限流&#xff1a;通過JS或APP端限制用戶高頻點擊…

git撤回commit

最常見的幾種撤回方式&#xff1a; 目標使用命令是否保留修改撤回最后一次 commit&#xff0c;但保留代碼修改git reset --soft HEAD~1? 保留撤回最后一次 commit&#xff0c;并丟棄修改git reset --hard HEAD~1? 丟棄撤回某個 commit&#xff0c;但保留后續提交git revert …