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

Qt自定義控件實現(xiàn)多彩色儀表盤

 更新時間:2019年12月19日 16:46:44   作者:parkchorong  
這篇文章主要為大家詳細介紹了Qt自定義控件實現(xiàn)多彩色儀表盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Qt實現(xiàn)多彩色儀表盤的具體代碼,供大家參考,具體內(nèi)容如下

Qt自定義控件4:多彩色儀表盤

先看效果圖:

思路:外圍三色的圓弧 紅:藍:綠 = 1:2:1,總共占270度??潭染€是根據(jù)所在圓弧的顏色而畫,刻度線的角度也是根據(jù)坐標(biāo)系的旋轉(zhuǎn)而畫??潭戎凳歉鶕?jù)刻度線的角度得到所要畫的刻度的左上角的坐標(biāo),然后構(gòu)成一個矩形,根據(jù)矩形畫出刻度值。指針是根據(jù)四個點的坐標(biāo)直接畫的四邊形,再旋轉(zhuǎn)坐標(biāo)系實現(xiàn)指針旋轉(zhuǎn)的效果。下方的文字直接得到坐標(biāo)橫縱坐標(biāo)位置得到矩形畫出value的值

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

void CMPassrate3::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);
  drawBG(&painter);
  drawE(&painter);
  drawLine(&painter);
  drawText(&painter);
  drawBootomText(&painter);
  drawPoint(&painter);
}

void CMPassrate3::drawE(QPainter* painter){
  painter->setPen(Qt::NoPen);
  QRect rectOut(-outRadius,-outRadius,2*outRadius,2*outRadius);
  QRect rectInn(-innRadius,-innRadius,2*innRadius,2*innRadius);
  painter->save();
  painter->setBrush(QColor("#04EEB2"));
  QPainterPath path;
  path.arcTo(rectOut,-45,270.0/4);

  QPainterPath subPath;
  subPath.addEllipse(rectInn);
  path -= subPath;
  painter->drawPath(path);
  painter->restore();

  painter->save();
  QPainterPath bluePath;
  QPainterPath blueSubPath;
  painter->setBrush(QColor("#2DC5F6"));
  bluePath.arcTo(rectOut,-45+(270.0/4),270.0/2);

  blueSubPath.addEllipse(rectInn);
  bluePath -= blueSubPath;
  painter->drawPath(bluePath);
  painter->restore();

  painter->save();
  QPainterPath redPath;
  QPainterPath redSubPath;
  painter->setBrush(QColor("#FA468C"));
  redPath.arcTo(rectOut,-45+270.0*3/4,270.0/4);

  redSubPath.addEllipse(rectInn);
  redPath -= redSubPath;
  painter->drawPath(redPath);
  painter->restore();
}

void CMPassrate3::drawLine(QPainter* painter){
  painter->save();
  painter->rotate(135);
  //270/8度一格
  for(int i = 0;i<9;i++){
    if(i<3){
      painter->setPen(QColor("#FA468C"));
    }else if(i<6){
      painter->setPen(QColor("#2DC5F6"));
    }else{
      painter->setPen(QColor("#04EEB2"));
    }
    QLine line(QPoint(lineStart,0),QPoint(innRadius,0));
    painter->drawLine(line);
    painter->rotate(270.0/8);
  }
  painter->restore();
}

void CMPassrate3::drawPoint(QPainter* painter){
  const QPoint point[4]{
    QPoint(0,0),QPoint(0,6),QPoint((lineStart-3)*qCos(135*3.14/180),(lineStart-3)*qSin(135*3.14/180)),QPoint(-6,0)
  };
  float range = 270.0/100*value;
  painter->save();
  painter->setBrush(QColor("#C2E481"));
  painter->rotate(range);
  painter->drawConvexPolygon(point,4);
  painter->restore();
}

void CMPassrate3::drawBG(QPainter* painter){//可以自行添加背景圖片實現(xiàn)更加精美的效果
//  painter->save();
//  QImage image(":/image/images/bg1.jpg");
//  QRect rect(-this->width(),-this->height(),this->width()*2,this->height()*2);
//  painter->drawImage(rect,image);
//  painter->restore();

}

void CMPassrate3::drawText(QPainter *painter){
  painter->save();
  //初始為
  painter->setPen(Qt::black);
  QFont font = painter->font();
  font.setPixelSize(8);
  painter->setFont(font);
  float x,y;
  for(float i =0;i<=100;i+=12.5){
    x = lineStart*qCos((135+(270.0/8)*((i+1)/12.5))*3.14/180);
    y = lineStart*qSin((135+(270.0/8)*((i+1)/12.5))*3.14/180);
    QRect rect;
    if(i<50){
      rect.setX(x);
      rect.setY(y);
    }else if(i>50){
      rect.setX(x-17);
      rect.setY(y-7);
    }else{
      rect.setX(x);
      rect.setY(y);
    }
    rect.setWidth(17);
    rect.setHeight(10);
    painter->drawText(rect,Qt::AlignCenter,QString::number(i));
  }


  painter->restore();
}

void CMPassrate3::drawBootomText(QPainter *painter){
  painter->save();
  painter->setPen(Qt::black);
  QFont font = painter->font();
  font.setPixelSize(25);
  painter->setFont(font);
  painter->translate(0,outRadius-12);
  int length = 20;
  QRect rect(-length,-length,length*2,length*2);
  painter->drawText(rect,Qt::AlignCenter,QString::number(value));
  painter->restore();
}

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

相關(guān)文章

  • C++之list容器模擬實現(xiàn)方式

    C++之list容器模擬實現(xiàn)方式

    這篇文章主要介紹了C++之list容器模擬實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 配置CLion管理Qt項目國際化支持的方法

    配置CLion管理Qt項目國際化支持的方法

    這篇文章主要介紹了配置CLion管理Qt項目國際化支持的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • VScode中添加頭文件和源文件(C/C++)的方法

    VScode中添加頭文件和源文件(C/C++)的方法

    使用VSCode編譯C/C++時,會存在找不到頭文件的情況,下面這篇文章主要給大家介紹了關(guān)于VScode中添加頭文件和源文件(C/C++)的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • C++ 中引用和指針的關(guān)系實例詳解

    C++ 中引用和指針的關(guān)系實例詳解

    這篇文章主要介紹了C++ 中引用和指針的關(guān)系實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • c++中將二維數(shù)組元素變換為逆向存放的實現(xiàn)代碼

    c++中將二維數(shù)組元素變換為逆向存放的實現(xiàn)代碼

    編程將一個二維數(shù)組元素變換為逆向存放,即按元素在內(nèi)存中的物理排列位置,第一個元素變成倒數(shù)第一個元素,第二個元素變成倒數(shù)第二個元素,依此類推
    2020-11-11
  • C/C++中派生類訪問屬性詳解及其作用介紹

    C/C++中派生類訪問屬性詳解及其作用介紹

    這篇文章主要介紹了C/C++中派生類訪問屬性詳解及其作用介紹,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++實現(xiàn)的鏈表類實例

    C++實現(xiàn)的鏈表類實例

    這篇文章主要介紹了C++實現(xiàn)的鏈表類,以完整實例分析了C++實現(xiàn)鏈表類的定義、插入、刪除、遍歷、統(tǒng)計等相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 使用VSCode和VS2017編譯調(diào)試STM32程序的實現(xiàn)

    使用VSCode和VS2017編譯調(diào)試STM32程序的實現(xiàn)

    這篇文章主要介紹了使用VSCode和VS2017編譯調(diào)試STM32程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C++共享智能指針shared_ptr的實現(xiàn)

    C++共享智能指針shared_ptr的實現(xiàn)

    在C++中沒有垃圾回收機制,必須自己釋放分配的內(nèi)存,否則就會造成內(nèi)存泄露,解決這個問題最有效的方法是使用智能指針,本文主要介紹了C++共享智能指針shared_ptr的實現(xiàn),感興趣的可以了解一下
    2023-12-12
  • 如何用C++實現(xiàn)A*尋路算法

    如何用C++實現(xiàn)A*尋路算法

    尋路是游戲比較重要的一個組成部分。因為不僅AI還有很多地方(例如RTS游戲里操控人物點到地圖某個點,然后人物自動尋路走過去)都需要用到自動尋路的功能。本文將介紹一個經(jīng)常被使用且效率理想的尋路方法-A*尋路算法,并且提供額外的優(yōu)化思路
    2021-06-06

最新評論

韩城市| 邵武市| 井陉县| 邵阳县| 岫岩| 惠水县| 房产| 逊克县| 瓦房店市| 长宁县| 芦山县| 普定县| 华池县| 凤山市| 游戏| 军事| 南投市| 故城县| 临潭县| 仁寿县| 调兵山市| 冀州市| 永登县| 麦盖提县| 柳河县| 资兴市| 昂仁县| 吴桥县| 辉县市| 额济纳旗| 易门县| 江西省| 澜沧| 晴隆县| 台南市| 柳河县| 衡东县| 高清| 滦平县| 宁蒗| 衢州市|