千家信息网

如何使用Qt自定义控件实现简易仪表盘

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关如何使用Qt自定义控件实现简易仪表盘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Qt自定义控件12:简易仪表盘思路:画270度的圆弧,
千家信息网最后更新 2026年11月02日如何使用Qt自定义控件实现简易仪表盘

这篇文章将为大家详细讲解有关如何使用Qt自定义控件实现简易仪表盘,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Qt自定义控件12:简易仪表盘

思路:画270度的圆弧,圆弧根据占比分为两种颜色,根据占比在圆弧上画出一个圆球作为标志,然后就是刻度线和刻度值。刻度线是根据坐标系旋转画出,刻度值是根据角度求出x,y坐标值构造出一个矩形画出刻度值(不要用坐标系旋转画刻度值,那样刻度值的角度也会旋转,写出的字不是正的,效果不好)。最后就是在中心画value。

关键代码:

void CMPassrate5::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); drawE(&painter); drawEPoint(&painter); drawLine(&painter); drawEText(&painter); drawValue(&painter);}void CMPassrate5::drawE(QPainter* painter){ QRect rect(-radius,-radius,2*radius,2*radius); painter->save(); painter->setPen(Qt::NoPen); QPainterPath path; QPainterPath subPath; QPainterPath outPath; QPainterPath outPubPath; outPath.arcTo(rect,-45,outRange); outPubPath.addEllipse(rect.adjusted(side,side,-side,-side)); outPath -= outPubPath; color.setAlpha(100); painter->setBrush(color); painter->drawPath(outPath); path.arcTo(rect,-45+outRange,range); subPath.addEllipse(rect.adjusted(4,4,-4,-4)); path -= subPath; color.setAlpha(180); painter->setBrush(color); painter->drawPath(path); painter->restore();}void CMPassrate5::drawEPoint(QPainter* painter){ //圆球位置就在outRange尽头处 painter->save(); color.setAlpha(180); painter->setPen(Qt::NoPen); painter->setBrush(color); float x = (radius-side/2)*qCos((range+135)*3.14/180); float y = (radius-side/2)*qSin((range+135)*3.14/180); qDebug()<<"x:"<drawEllipse(QPoint(x,y),side,side); painter->restore();}void CMPassrate5::drawLine(QPainter* painter){ painter->save(); painter->rotate(135); color.setAlpha(100); painter->setPen(color); QLine line(QPoint(radius-side-lineLength,0),QPoint(radius-side,0)); for(int i = 0;idrawLine(line); painter->rotate(270.0/lineCount); } painter->restore();}void CMPassrate5::drawEText(QPainter* painter){ painter->save();// painter->rotate(135); painter->setPen(Qt::black); float textRange = 270.0/(textCount-1); float x,y; for(int i = 0;i<=10;i++){ x = (radius-side-lineLength)*qCos((textRange*i+135)*3.14/180); y = (radius-side-lineLength)*qSin((textRange*i+135)*3.14/180); if(i<5){ QRect rect(x,y-4,20,10); painter->drawText(rect,Qt::AlignCenter,QString::number(i*10)); }else if(i ==5){ QRect rect(x-7,y,20,10); painter->drawText(rect,Qt::AlignCenter,QString::number(i*10)); }else{ QRect rect(x-20,y-5,20,10); painter->drawText(rect,Qt::AlignCenter,QString::number(i*10)); } } painter->restore();}void CMPassrate5::drawValue(QPainter* painter){ painter->save(); QPen pen = painter->pen(); pen.setColor(color); pen.setWidth(2); painter->setPen(pen); QFont font = painter->font(); font.setPixelSize(45); painter->setFont(font); QRect rect(-25,-25,50,50); painter->drawText(rect,Qt::AlignCenter,QString::number(value)); painter->restore();}

关于"如何使用Qt自定义控件实现简易仪表盘"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

刻度 仪表 仪表盘 控件 简易 圆弧 篇文章 圆球 坐标 坐标系 就是 更多 角度 不错 实用 不好 代码 位置 关键 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 深圳市人人互联网科技有限公司 上海卓越科技互联网 与互联网科技公司 易互联网科技有限公司 上海挚品互联网科技 中国互联网科技发展 宁波青枫互联网科技有限公司 现代互联网科技股 南平创想时代互联网科技有限公司 玉溪互联网科技怎么选 科技类公司包括互联网吗 济南有互联网科技公司吗 互联网相关科技技术 广州智享互联网科技 艺电能源互联网科技有限公司招聘 互联网科技创业计划的风险分析 互联网科技快速发展优美句子 如何强化互联网金融科技 互联网 科技节活动 微视频大赛 科技互联网产品 科技服务与互联网 上海喔噻互联网科技 互联网科技革命什么开始 世界互联网领先科技成果获奖 美国互联网科技实力 互联网领先科技宣传片 山东大美朱楼互联网科技有限公司 科技信息时代互联网发展 互联网高科技绘画
0