Qt自定义控件实现圆盘进度条
本文实例为大家分享了Qt圆盘进度条的具体代码,供大家参考,具体内容如下
自定义控件二:圆盘进度条
上效果图:
主要思路:使用qpainter根据图形需求画圆和圆弧,画指针(多边形,指定坐标即可),根据具体的value值旋转坐标系,使指针达到旋转效果,旋转度数是根据value值,总共360度,占比求得。最中间需要画文字上去,每次更新value时调用update()方法,重绘界面。
主要代码:CMPassrate1.cpp
voidCMPassrate1::paintEvent(QPaintEvent*event){ intwidth=this->width(); intheight=this->height(); intside=qMin(width,height); QPainterpainter(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对应的填充角度 } voidCMPassrate1::paintSide(QPainter*painter){ intradis=outRadis; QRectrect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#505050"))); painter->setPen(Qt::NoPen); painter->drawEllipse(rect); painter->restore(); } voidCMPassrate1::paintOutE(QPainter*painter){ intradis=outRadis-side; QRectrect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#868686"))); painter->setPen(Qt::NoPen); painter->drawEllipse(rect); painter->restore(); } voidCMPassrate1::paintLine(QPainter*painter){ intlineStart=outRadis-3; painter->save(); painter->setPen(QColor("#868686")); intrange=360/12; for(inti=0;i<12;i++){ painter->rotate(range); painter->drawLine(QPoint(lineStart,0),QPoint(outRadis,0)); } painter->restore(); } voidCMPassrate1::paintInE(QPainter*painter){ intradis=inRadis; QRectrect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#646464"))); painter->setPen(Qt::NoPen); painter->drawEllipse(rect); painter->restore(); } voidCMPassrate1::paintTextE(QPainter*painter){ intradis=23; QRectrect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#FFFFFF"))); painter->setPen(Qt::NoPen); painter->drawEllipse(rect); painter->restore(); } voidCMPassrate1::paintPoint(QPainter*painter){ painter->save(); constQPointpoints[3]={ QPoint(10,0), QPoint(-10,0), QPoint(0,inRadis-5) }; intrange=((double)value/100)*360; painter->rotate(range); painter->setPen(Qt::NoPen); painter->setBrush(QBrush(QColor("#66CFFF"))); painter->drawConvexPolygon(points,3); painter->restore(); } voidCMPassrate1::paintText(QPainter*painter){ intradis=23; QRectrect(-radis,-radis,radis*2,radis*2); painter->save(); painter->setBrush(QBrush(QColor("#000000"))); painter->setPen(QPen(QColor("#000000"))); QFontfont=painter->font(); font.setPixelSize(20); painter->setFont(font); painter->drawText(rect,Qt::AlignCenter,QString("%1%").arg(QString::number(value))); painter->restore(); } voidCMPassrate1::paintValue(QPainter*painter){ intoRandis=outRadis-side; qDebug()<<"value::"<save(); painter->setBrush(valueColor); painter->setPen(Qt::NoPen); painter->drawPath(path); painter->restore(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。