如何使用Qt自定义控件实现多彩色仪表盘
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,小编给大家分享一下如何使用Qt自定义控件实现多彩色仪表盘,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下Qt自定
千家信息网最后更新 2025年11月12日如何使用Qt自定义控件实现多彩色仪表盘
小编给大家分享一下如何使用Qt自定义控件实现多彩色仪表盘,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
具体内容如下
Qt自定义控件4:多彩色仪表盘
思路:外围三色的圆弧 红:蓝:绿 = 1:2:1,总共占270度。刻度线是根据所在圆弧的颜色而画,刻度线的角度也是根据坐标系的旋转而画。刻度值是根据刻度线的角度得到所要画的刻度的左上角的坐标,然后构成一个矩形,根据矩形画出刻度值。指针是根据四个点的坐标直接画的四边形,再旋转坐标系实现指针旋转的效果。下方的文字直接得到坐标横纵坐标位置得到矩形画出value的值
关键代码:CMPassrate3.cpp
void CMPassrate3::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); drawBG(&painter); drawE(&painter); drawLine(&painter); drawText(&painter); drawBootomText(&painter); drawPoint(&painter);}void CMPassrate3::drawE(QPainter* painter){ painter->setPen(Qt::NoPen); QRect rectOut(-outRadius,-outRadius,2*outRadius,2*outRadius); QRect rectInn(-innRadius,-innRadius,2*innRadius,2*innRadius); painter->save(); painter->setBrush(QColor("#04EEB2")); QPainterPath path; path.arcTo(rectOut,-45,270.0/4); QPainterPath subPath; subPath.addEllipse(rectInn); path -= subPath; painter->drawPath(path); painter->restore(); painter->save(); QPainterPath bluePath; QPainterPath blueSubPath; painter->setBrush(QColor("#2DC5F6")); bluePath.arcTo(rectOut,-45+(270.0/4),270.0/2); blueSubPath.addEllipse(rectInn); bluePath -= blueSubPath; painter->drawPath(bluePath); painter->restore(); painter->save(); QPainterPath redPath; QPainterPath redSubPath; painter->setBrush(QColor("#FA468C")); redPath.arcTo(rectOut,-45+270.0*3/4,270.0/4); redSubPath.addEllipse(rectInn); redPath -= redSubPath; painter->drawPath(redPath); painter->restore();}void CMPassrate3::drawLine(QPainter* painter){ painter->save(); painter->rotate(135); //270/8度一格 for(int i = 0;i<9;i++){ if(i<3){ painter->setPen(QColor("#FA468C")); }else if(i<6){ painter->setPen(QColor("#2DC5F6")); }else{ painter->setPen(QColor("#04EEB2")); } QLine line(QPoint(lineStart,0),QPoint(innRadius,0)); painter->drawLine(line); painter->rotate(270.0/8); } painter->restore();}void CMPassrate3::drawPoint(QPainter* painter){ const QPoint point[4]{ QPoint(0,0),QPoint(0,6),QPoint((lineStart-3)*qCos(135*3.14/180),(lineStart-3)*qSin(135*3.14/180)),QPoint(-6,0) }; float range = 270.0/100*value; painter->save(); painter->setBrush(QColor("#C2E481")); painter->rotate(range); painter->drawConvexPolygon(point,4); painter->restore();}void CMPassrate3::drawBG(QPainter* painter){//可以自行添加背景图片实现更加精美的效果// painter->save();// QImage image(":/image/images/bg1.jpg");// QRect rect(-this->width(),-this->height(),this->width()*2,this->height()*2);// painter->drawImage(rect,image);// painter->restore();}void CMPassrate3::drawText(QPainter *painter){ painter->save(); //初始为 painter->setPen(Qt::black); QFont font = painter->font(); font.setPixelSize(8); painter->setFont(font); float x,y; for(float i =0;i<=100;i+=12.5){ x = lineStart*qCos((135+(270.0/8)*((i+1)/12.5))*3.14/180); y = lineStart*qSin((135+(270.0/8)*((i+1)/12.5))*3.14/180); QRect rect; if(i<50){ rect.setX(x); rect.setY(y); }else if(i>50){ rect.setX(x-17); rect.setY(y-7); }else{ rect.setX(x); rect.setY(y); } rect.setWidth(17); rect.setHeight(10); painter->drawText(rect,Qt::AlignCenter,QString::number(i)); } painter->restore();}void CMPassrate3::drawBootomText(QPainter *painter){ painter->save(); painter->setPen(Qt::black); QFont font = painter->font(); font.setPixelSize(25); painter->setFont(font); painter->translate(0,outRadius-12); int length = 20; QRect rect(-length,-length,length*2,length*2); painter->drawText(rect,Qt::AlignCenter,QString::number(value)); painter->restore();}以上是"如何使用Qt自定义控件实现多彩色仪表盘"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
刻度
坐标
仪表
仪表盘
彩色
控件
内容
矩形
篇文章
圆弧
坐标系
指针
效果
角度
精美
不怎么
代码
位置
关键
四边
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全周宣传活动竞赛
人大金仓数据库修改编码
电大计算机网络技术考数学吗
软件开发出身的创始人
荆门市网络安全电话
考研学校数据库查询
虹信软件开发笔试
数据库怎么恢复数据
sql 系统数据库查询
农业银行软件开发中心招聘
内网服务器连接电脑
服务器生产环节部署
宁波嵌入式软件开发
网页如何读取数据库的数据
助君网络安全工程师
本网站属于海外服务器图片
下载dvdrental数据库
数据库怎么迁移到别的盘
嘉定区进口软件开发批发价格
网络安全攻防实验室
信息软件开发瀑布模型
移动的安全数据库
通信工程和数据库论文题目
网易游戏软件开发工程师怎么样
网络安全知赛
JSP页面控件查询数据库
中华人民共和国网络安全法心得
网络安全攻防实验室
双至强e5的服务器
dnf出现英文数据库