国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

Qt自定義控件實(shí)現(xiàn)進(jìn)度儀表盤

2020-01-26 13:21:37
字體:
供稿:網(wǎng)友

本文實(shí)例為大家分享了Qt自定義控件實(shí)現(xiàn)進(jìn)度儀表盤的具體代碼,供大家參考,具體內(nèi)容如下

先看效果圖:


思路:外圍的線共100根(自定義,可改變),總共占270度,然后按照 先畫一條線然后旋轉(zhuǎn)坐標(biāo)系的思路畫出完整的線。內(nèi)部即是一個灰色的背景圓,一個圓弧和中間的value對應(yīng)的文字。

關(guān)鍵代碼:CMPassrate2.cpp

void CMPassrate2::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); drawBGE(&painter); //畫背景圓 drawTextE(&painter);//畫文字所在圓弧 drawText(&painter);//畫文字 drawLines(&painter);//畫最外部的線}void CMPassrate2::updateValue(float value){//提供給外部的方法,用于更新value this->value = value; update();//每次更新value后,都重繪界面}void CMPassrate2::drawLines(QPainter* painter){ painter->save(); QPen pen; pen.setColor(QColor("#A7DD42")); pen.setWidth(2); painter->setPen(pen); float range = 270.0/lineCount; //自定義所有的線加起來占270度,100條線 painter->rotate(135);//旋轉(zhuǎn)135度,開始畫線,總共畫270度。 QLine line(QPoint(outLineRadius,0),QPoint(innLineRadius,0)); for(int i = 1;i<=lineCount;i++){  if(i>value){   QPen pen;   pen.setColor(QColor("#D7D7D7"));   pen.setWidth(2);   painter->setPen(pen);  }  painter->drawLine(line);  painter->rotate(range); } painter->restore();}void CMPassrate2::drawBGE(QPainter* painter){ painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(QColor("#EAEAEA")); QRect rect(-bgERadius,-bgERadius,bgERadius*2,bgERadius*2); painter->drawEllipse(rect); painter->restore();}void CMPassrate2::drawTextE(QPainter* painter){ painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(QColor("#2DC877")); QPainterPath path; QRect rectOut(-textOutRadius,-textOutRadius,textOutRadius*2,textOutRadius*2); path.arcTo(rectOut,0,360); QPainterPath subPath; QRect rectInn(-textInnRadius,-textInnRadius,textInnRadius*2,textInnRadius*2); subPath.addEllipse(rectInn); path -= subPath; painter->drawPath(path); painter->restore();}void CMPassrate2::drawText(QPainter* painter){ painter->save(); painter->setPen(QColor("#62A0DB")); QRect rectInn(-textInnRadius,-textInnRadius,textInnRadius*2,textInnRadius*2); QFont font = painter->font(); font.setPixelSize(textSize); painter->setFont(font); painter->drawText(rectInn,Qt::AlignCenter,QString::number(value)); painter->restore();}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 扶绥县| 秦安县| 盐边县| 广平县| 涟水县| 雷波县| 贺兰县| 塘沽区| 阿鲁科尔沁旗| 闽清县| 江陵县| 当阳市| 长春市| 斗六市| 合水县| 山丹县| 河津市| 广河县| 隆尧县| 南通市| 台前县| 阿鲁科尔沁旗| 囊谦县| 南开区| 定州市| 密山市| 庐江县| 许昌市| 明光市| 鄄城县| 富阳市| 文登市| 桐庐县| 绵竹市| 怀安县| 陈巴尔虎旗| 黄梅县| 邹城市| 榆林市| 西吉县| 新兴县|