如何使用Qt自定义控件实现进度仪表盘
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要为大家展示了"如何使用Qt自定义控件实现进度仪表盘",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Qt自定义控件实现进度仪表盘"这篇文章
千家信息网最后更新 2025年02月23日如何使用Qt自定义控件实现进度仪表盘
这篇文章主要为大家展示了"如何使用Qt自定义控件实现进度仪表盘",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Qt自定义控件实现进度仪表盘"这篇文章吧。
具体内容如下
思路:外围的线共100根(自定义,可改变),总共占270度,然后按照 先画一条线然后旋转坐标系的思路画出完整的线。内部即是一个灰色的背景圆,一个圆弧和中间的value对应的文字。
关键代码:CMPassrate2.cpp
void CMPassrate2::paintEvent(QPaintEvent *event){//界面绘制事件 int width = this->width(); int height = this->height(); int side = qMin(width, height); QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); painter.translate(width / 2, height / 2); painter.scale(side / 200.0, side / 200.0); drawBGE(&painter); //画背景圆 drawTextE(&painter);//画文字所在圆弧 drawText(&painter);//画文字 drawLines(&painter);//画最外部的线}void CMPassrate2::updateValue(float value){//提供给外部的方法,用于更新value this->value = value; update();//每次更新value后,都重绘界面}void CMPassrate2::drawLines(QPainter* painter){ painter->save(); QPen pen; pen.setColor(QColor("#A7DD42")); pen.setWidth(2); painter->setPen(pen); float range = 270.0/lineCount; //自定义所有的线加起来占270度,100条线 painter->rotate(135);//旋转135度,开始画线,总共画270度。 QLine line(QPoint(outLineRadius,0),QPoint(innLineRadius,0)); for(int i = 1;i<=lineCount;i++){ if(i>value){ QPen pen; pen.setColor(QColor("#D7D7D7")); pen.setWidth(2); painter->setPen(pen); } painter->drawLine(line); painter->rotate(range); } painter->restore();}void CMPassrate2::drawBGE(QPainter* painter){ painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(QColor("#EAEAEA")); QRect rect(-bgERadius,-bgERadius,bgERadius*2,bgERadius*2); painter->drawEllipse(rect); painter->restore();}void CMPassrate2::drawTextE(QPainter* painter){ painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(QColor("#2DC877")); QPainterPath path; QRect rectOut(-textOutRadius,-textOutRadius,textOutRadius*2,textOutRadius*2); path.arcTo(rectOut,0,360); QPainterPath subPath; QRect rectInn(-textInnRadius,-textInnRadius,textInnRadius*2,textInnRadius*2); subPath.addEllipse(rectInn); path -= subPath; painter->drawPath(path); painter->restore();}void CMPassrate2::drawText(QPainter* painter){ painter->save(); painter->setPen(QColor("#62A0DB")); QRect rectInn(-textInnRadius,-textInnRadius,textInnRadius*2,textInnRadius*2); QFont font = painter->font(); font.setPixelSize(textSize); painter->setFont(font); painter->drawText(rectInn,Qt::AlignCenter,QString::number(value)); painter->restore();}
以上是"如何使用Qt自定义控件实现进度仪表盘"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容
仪表
仪表盘
控件
进度
文字
篇文章
圆弧
思路
界面
背景
学习
帮助
更新
事件
代码
关键
坐标
坐标系
所在
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
嵌入式控制软件开发
上海微量网络技术有限公司
软件开发计划如何写
延庆天气预报软件开发
计算机网络技术转专业
查看文件数据库文件夹
魔兽正式服部落最多的服务器
游戏每日任务数据库表的设计
疫情软件开发千名程序员
网络安全主题绘画A3
erp数据库是几个模块
特定网络技术转让比较
查找中文会议文献的数据库
数据库党务管理系统
网络安全知识竞赛可以补考吗
怒火一刀盗版服务器
服务器系统ip是啥
该数据库模式由四个关系组成
日喀则有几个软件开发公司
手机能访问的web服务器
java数据库的原理
数据库基础 英文
查找中文会议文献的数据库
mt5 服务器地址
国家网络安全工作四个坚持是
电信网络技术类
数据库持久化操作
亚马逊云服务器国内稳定吗
清华大学网络技术复试
临沂云升网络技术有限公司