千家信息网

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

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍如何使用Qt自定义控件实现圆盘进度条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下自定义控件二:圆盘进度条主要思路:使用qpainter根据图形需求
千家信息网最后更新 2026年11月02日如何使用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安全错误 数据库的锁怎样保障安全 深圳九邦互联网科技有限公司 互联网科技公司经营范围 科技互联网产品 网络科技有限互联网 科技与互联网发展 互联网科技媒体 左右互联网络科技 济南和联互联网科技有限公司 玖二柒互联网科技公司待遇 现代科技和互联网有关系吗 华服互联网科技官网 互联网公司科技股 晓花互联网科技有限公司网址 崇明区互联网教育科技售后服务 互联网科技扶贫时间 科技大学互联网 徐州市互联网科技有限公司 昆明中奇联合互联网科技 同城互联网络科技 科技发展第三阶段互联网时代 互联网是第几次科技革命的成果 互联网金融 科技金融 互联网科技公司官网 人人互联网科技是培训 成都玖崟互联网科技有限公司乐商圈怎么样 须眉科技是互联网公司吗 合肥互联网科技公司公章图片 上海钢联属于互联网科技股吗 城市宝互联网科技有限公司 国产互联网科技公司
0