千家信息网

如何使用Qt自定义控件实现圆盘进度条

发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,这篇文章主要介绍如何使用Qt自定义控件实现圆盘进度条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下自定义控件二:圆盘进度条主要思路:使用qpainter根据图形需求
千家信息网最后更新 2025年11月18日如何使用Qt自定义控件实现圆盘进度条

这篇文章主要介绍如何使用Qt自定义控件实现圆盘进度条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下

自定义控件二:圆盘进度条

主要思路:使用qpainter根据图形需求 画圆和圆弧,画指针(多边形,指定坐标即可),根据具体的value值旋转坐标系,使指针达到旋转效果,旋转度数是根据value值,总共360度,占比求得。最中间需要画文字上去,每次更新value时调用update()方法,重绘界面。

主要代码:CMPassrate1.cpp

void CMPassrate1::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); //绘制外圆 paintSide(&painter); paintOutE(&painter); paintLine(&painter);//绘制刻度线 paintInE(&painter); paintPoint(&painter);//绘制指针 paintTextE(&painter);//绘制文字所在的圆 paintText(&painter);//绘制文字 paintValue(&painter);//绘制value对应的填充角度}void CMPassrate1::paintSide(QPainter *painter){ int radis = outRadis; QRect rect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#505050"))); painter->setPen(Qt::NoPen); painter->drawEllipse(rect); painter->restore();}void CMPassrate1::paintOutE(QPainter *painter){ int radis = outRadis-side; QRect rect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#868686"))); painter->setPen(Qt::NoPen); painter->drawEllipse(rect); painter->restore();}void CMPassrate1::paintLine(QPainter *painter){ int lineStart = outRadis-3; painter->save(); painter->setPen(QColor("#868686")); int range = 360/12; for(int i = 0;i<12;i++){ painter->rotate(range); painter->drawLine(QPoint(lineStart,0),QPoint(outRadis,0)); } painter->restore();}void CMPassrate1::paintInE(QPainter *painter){ int radis = inRadis; QRect rect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#646464"))); painter->setPen(Qt::NoPen); painter->drawEllipse(rect); painter->restore();}void CMPassrate1::paintTextE(QPainter *painter){ int radis = 23; QRect rect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#FFFFFF"))); painter->setPen(Qt::NoPen); painter->drawEllipse(rect); painter->restore();}void CMPassrate1::paintPoint(QPainter *painter){ painter->save(); const QPoint points[3] = { QPoint(10,0), QPoint(-10,0), QPoint(0,inRadis-5) }; int range = ((double)value/100)*360; painter->rotate(range); painter->setPen(Qt::NoPen); painter->setBrush(QBrush(QColor("#66CFFF"))); painter->drawConvexPolygon(points,3); painter->restore();}void CMPassrate1::paintText(QPainter *painter){ int radis = 23; QRect rect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#000000"))); painter->setPen(QPen(QColor("#000000"))); QFont font = painter->font(); font.setPixelSize(20); painter->setFont(font); painter->drawText(rect,Qt::AlignCenter,QString("%1%").arg(QString::number(value))); painter->restore();}void CMPassrate1::paintValue(QPainter *painter){ int oRandis = outRadis-side; qDebug()<<"value::"<save(); painter->setBrush(valueColor); painter->setPen(Qt::NoPen); painter->drawPath(path); painter->restore();}

以上是"如何使用Qt自定义控件实现圆盘进度条"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

圆盘 控件 进度 内容 指针 文字 坐标 篇文章 代码 价值 兴趣 刻度 图形 圆弧 坐标系 多边形 小伙 小伙伴 度数 思路 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 无线网络安全性开放 邯郸定制软件开发解决方案 域管理服务器能限制外网吗 恐怖分子利用网络技术 网络安全共享网络文明手抄报 求生意志服务器好吗 学会苹果手机的软件开发 中考计算机网络技术分数线 欧洲的服务器名称 安徽代理服务器 电脑上不了网无法连接代理服务器 未来有前景的企业系统软件开发 借助网络技术手段 党建 以网络安全的童诗童谣 5g带来的网络安全 数据库定时备份任务怎么查看 linux smb服务器 软件开发 css文件 电脑网络安全模式怎么退 航天信息开票服务器管理系统 内蒙古经济网络技术有限公司 空间网络安全专业就业方向 数据库的目标和方法 网络安全视频网站怎么删除 百计网络技术有限公司 图形化软件开发平台 网络安全教育有什么优势和特点 数据库关机需要断开 学校卫生网络安全防控报告 上海迪力茹斯网络技术有限公司
0