如何使用Qt自定义控件实现进度仪表盘
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要为大家展示了"如何使用Qt自定义控件实现进度仪表盘",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Qt自定义控件实现进度仪表盘"这篇文章
千家信息网最后更新 2025年01月16日如何使用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安全错误
数据库的锁怎样保障安全
软件开发后的工作总结
全球网络技术专利排名
网络安全违规问题
网络安全宣传稿一千字
网络安全培训学
软件开发能上岗标准
太极股份软件开发社招难进吗
奇安信软件开发笔试原题
计算机网络技术数据通信
方舟生存进不去服务器
软件开发工程师最烦
十堰市网络技术培训班
刘震 工信部网络安全管理局
佛山地产软件开发外包
数据库自动接收数据
无锡运行智慧消防软件开发
网络安全办公电脑
网络安全工程师的工作单位
数据库安全的特征
代理服务器安装
数据库抽象级别最高的模型
青海省检察院网络安全建设
市北区定制软件开发哪家好
我的世界管理员如何关服务器
三维GIS数据库
徐州app软件开发价格
小花仙手游换服务器会换号码
深圳云盟网络技术有限公司
命令窗口启动数据库
软件开发中心 名字