最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt自定義控件實現圓盤進度條

 更新時間:2019年12月19日 15:54:28   作者:parkchorong  
這篇文章主要為大家詳細介紹了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::"<<value;
  int rangle = ((double)value/100)*360;
  QRectF rect(-oRandis, -oRandis, oRandis << 1, oRandis << 1);
  QPainterPath path;
  qDebug()<<"rangle:"<<rangle<<" start:"<<270-rangle;
  path.arcTo(rect, 270-rangle, rangle);

  // QRectF(-120, -120, 240, 240)
  QPainterPath subPath;
  subPath.addEllipse(rect.adjusted((oRandis-inRadis),(oRandis-inRadis),-(oRandis-inRadis),-(oRandis-inRadis)));

  // path為扇形 subPath為橢圓
  path -= subPath;
  painter->save();
  painter->setBrush(valueColor);
  painter->setPen(Qt::NoPen);
  painter->drawPath(path);
  painter->restore();
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C++缺省參數、函數重載與引用深入解析

    C++缺省參數、函數重載與引用深入解析

    缺省參數函數重載以及引用的出現是為了補充C語言語法的不足以及對C語言設計不合理的地方進行優(yōu)化,引用的出現大大降低了我們學習C語言時相對于指針的難度,也便于我們更好的理解和使用,感興趣的朋友一起看看吧
    2024-04-04
  • 常用的C語言排序算法(兩種)

    常用的C語言排序算法(兩種)

    本文給大家分享兩種常用的C語言排序算法,代碼非常簡單,感興趣的朋友可以參考下
    2016-09-09
  • 一篇文章教你用C語言模擬實現字符串函數

    一篇文章教你用C語言模擬實現字符串函數

    這篇文章主要介紹了C語言模擬實現字符串函數,開發(fā)程序的時候經常使用到一些字符串函數,例如求字符串長度,拷貝字符串……,需要的朋友可以參考下
    2021-09-09
  • C++實現圖的鄰接矩陣存儲和廣度、深度優(yōu)先遍歷實例分析

    C++實現圖的鄰接矩陣存儲和廣度、深度優(yōu)先遍歷實例分析

    這篇文章主要介紹了C++實現圖的鄰接矩陣存儲和廣度、深度優(yōu)先遍歷,實例分析了C++實現圖的遍歷技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 基于樹莓派實現播放MP3音樂

    基于樹莓派實現播放MP3音樂

    這篇文章主要為大家詳細介紹了基于樹莓派實現播放MP3音樂,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • C++驅動bash的實現代碼

    C++驅動bash的實現代碼

    這篇文章主要介紹了C++驅動bash的實現代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 算法詳解之回溯法具體實現

    算法詳解之回溯法具體實現

    這篇文章主要介紹了算法詳解之回溯法具體實現,需要的朋友可以參考下
    2014-02-02
  • C/C++中比較字符串的方法詳解

    C/C++中比較字符串的方法詳解

    這篇文章主要介紹了C/C++中比較字符串的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++實現LeetCode(100.判斷相同樹)

    C++實現LeetCode(100.判斷相同樹)

    這篇文章主要介紹了C++實現LeetCode(100.判斷相同樹),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • linux根據pid獲取進程名和獲取進程pid(c語言獲取pid)

    linux根據pid獲取進程名和獲取進程pid(c語言獲取pid)

    status文件,第一行的Name即為進程名,C程序實現根據PID獲取進程名和根據進程名獲取PID,大家參考使用吧
    2013-12-12

最新評論

新沂市| 五家渠市| 孝义市| 崇仁县| 武强县| 尼勒克县| 无极县| 德安县| 隆昌县| 淅川县| 元谋县| 凤庆县| 丹凤县| 陕西省| 兴宁市| 金溪县| 罗城| 新绛县| 类乌齐县| 兴海县| 平果县| 察雅县| 石狮市| 定日县| 卢氏县| 焉耆| 长子县| 沙湾县| 盐城市| 怀来县| 海阳市| 涞源县| 兴安盟| 莱州市| 江永县| 商洛市| 尼勒克县| 正蓝旗| 巴彦淖尔市| 拉孜县| 师宗县|