日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT小控件-仪表盘

發布時間:2024/3/26 c/c++ 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT小控件-仪表盘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QT小控件-儀表盤

  • 前言
  • 一、程序代碼如下:
    • wbgaugeone.pri:
    • wbgaugeone.h:
    • wbgaugeone.cpp:
  • 總結


前言

具體使用說明見:https://blog.csdn.net/qq_39641107/article/details/121250077?spm=1001.2014.3001.5501
示意圖:

一、程序代碼如下:

wbgaugeone.pri:

HEADERS += wbgaugeone.h SOURCES += wbgaugeone.cpp

wbgaugeone.h:

#ifndef WBGAUGEONE_H #define WBGAUGEONE_H#include <QWidget> #include <math.h> #include <QPainter> #include <QtCore> #include <QFontMetrics> class WBgaugeone : public QWidget {Q_OBJECTpublic:WBgaugeone(QWidget *parent = 0);void setpointer_number(int pointer);//設置指針指向0-60void setcolorarc(QColor rarc); //最外層圓弧顏色void setcolorarc2(QColor rarc2); //中心圓漸變色起點顏色void setcolornumber(QColor number); //數字顏色void setcolorline(QColor line); //度量標直線顏色void setcolorlips(QColor lips);//圓的終點顏色void setcolorpointer(QColor pointer);//指針顏色 private:QColor colorarc;//弧線顏色QColor colorarc2;//弧線顏色2QColor colornumber;//數字顏色QColor colorline;//直線顏色QColor colorelips;//圓顏色QColor colorpointer;//指針顏色QPen pen;//線QBrush brush;//刷子QRect rect;//視口int x, y;int pointer_number; //0-60 protected:void paintEvent(QPaintEvent *);void wbcircleEquation(int r, double j);void wbdrawArc(QPainter *painter);//畫弧線void wbdrawNumber(QPainter *painter, QString numberstr,int x, int y);//畫數字void wbdrawLine(QPainter *painter, int linewidth,int x1, int y1, int x2, int y2);//畫直線void wbdrawEllips(QPainter *painter);//畫圓void wbdrawPointer(QPainter *painter, int x1,int y1, int x2,int y2, int x3, int y3);//畫指針};#endif // WBGAUGEONE_H

wbgaugeone.cpp:

#include "wbgaugeone.h"WBgaugeone::WBgaugeone(QWidget *parent) :QWidget(parent) {colorarc = Qt::black;//弧線顏色colorarc2 = Qt::white;//弧線顏色2colornumber =Qt::red;//數字顏色colorline = Qt::black;//直線顏色colorelips = Qt::blue;//圓顏色colorpointer = Qt::blue;//指針顏色pointer_number = 0;this->repaint(); } void WBgaugeone::wbcircleEquation(int r ,double j)//根據x坐標獲得圓的y坐標,sign判斷y的正負性 {double val = 3.14159265 / 180;if (j>180){x = -int(r*fabs(cos(val*j)));y = int(r*fabs(sin(val*j)));}else if (j<=180 && j>90){x = -int(r*fabs(cos(val*j)));y = -int(r*fabs(sin(val*j)));}else if (j<=90 && j>0){x = int(r*fabs(cos(val*j)));y = -int(r*fabs(sin(val*j)));}else{x = int(r*fabs(cos(val*j)));y = int(r*fabs(sin(val*j)));} } void WBgaugeone::wbdrawArc(QPainter *painter)//畫弧線 {pen = QPen();pen.setWidth(25);//25pen.setColor(colorarc);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::RoundCap);pen.setJoinStyle(Qt::BevelJoin);painter->setPen(pen);painter->save();painter->translate(250,250);rect.setRect(-235,-235,470,470);painter->drawArc(rect,-45*16,270*16);painter->restore();} void WBgaugeone::wbdrawNumber(QPainter *painter, QString numberstr,int x, int y)//畫數字 {QFont font;font.setFamily("微軟雅黑");//字體 // font.setPixelSize(25);//文字像素大小font.setPointSize(25);//文字大小 // QFontMetrics textsize = QFontMetrics(font); // QRect textrect = QRect(textsize.boundingRect(numberstr));painter->setFont(font);int widthofTitle = painter->fontMetrics().width(numberstr);//字符串顯示的像素大小int heightofTitle = painter->fontMetrics().height();pen = QPen();pen.setWidth(3);//3pen.setColor(colornumber);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::FlatCap);pen.setJoinStyle(Qt::BevelJoin);painter->setPen(pen);painter->save();painter->translate(250,250);painter->drawText(x-widthofTitle/2,y+heightofTitle/4,numberstr);painter->restore(); } void WBgaugeone::wbdrawLine(QPainter *painter, int linewidth,int x1, int y1,int x2, int y2)//畫直線 {pen = QPen();pen.setWidth(linewidth);pen.setColor(colorline);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::RoundCap);pen.setJoinStyle(Qt::BevelJoin);painter->setPen(pen);painter->save();painter->translate(250,250);painter->drawLine(x1,y1,x2,y2);painter->restore();} void WBgaugeone::wbdrawEllips(QPainter *painter)//畫圓 {pen = QPen();pen.setWidth(2);//25pen.setColor(colorelips);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::RoundCap);pen.setJoinStyle(Qt::BevelJoin);painter->setPen(pen); // brush = QBrush(); // brush.setColor(colorelips); // brush.setStyle(Qt::SolidPattern); // painter->setBrush(brush);rect.setRect(-25,-25,50,50);QRadialGradient radial = QRadialGradient(0,0,25,0,0);radial.setColorAt(0,colorarc2);radial.setColorAt(1,colorelips);painter->save();painter->translate(250,250);painter->setBrush(radial);painter->drawEllipse(rect);painter->restore(); } void WBgaugeone::wbdrawPointer(QPainter *painter,int x1,int y1, int x2,int y2, int x3, int y3)//畫指針 {pen = QPen();pen.setWidth(1);//25pen.setColor(colorpointer);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::RoundCap);pen.setJoinStyle(Qt::BevelJoin);painter->setPen(pen);brush = QBrush();brush.setColor(colorpointer);brush.setStyle(Qt::SolidPattern);painter->setBrush(brush);painter->save();painter->translate(250,250);painter->drawPolygon(QPolygon({QPoint(x1,y1),QPoint(x2,y2),QPoint(x3,y3)}));painter->restore(); } void WBgaugeone::paintEvent(QPaintEvent *)//繪制 {QPainter wbpainter(this);wbpainter.setRenderHint(QPainter::Antialiasing);wbpainter.setRenderHint(QPainter::TextAntialiasing);rect = QRect(0,0,this->width(),this->height());wbpainter.setViewport(rect);wbpainter.setWindow(0,0,500,500);this->wbdrawArc(&wbpainter);double j=225;for (int i=0;i<=12;i++){QString istr = QString::number(i,10);this->wbcircleEquation(190,j);this->wbdrawNumber(&wbpainter,istr,x,y);for(int line_i = 0;line_i<=4;line_i++){int x1,x2,y1,y2,r;int linewidth;if (line_i == 0){linewidth = 5;r=110;}else{linewidth = 2;r=130;}this->wbcircleEquation(150,j-line_i*4.5);x1=x;y1=y;this->wbcircleEquation(r,j-line_i*4.5);x2=x;y2=y;this->wbdrawLine(&wbpainter,linewidth,x1,y1,x2,y2);if (j == -45 && line_i == 0)break;}j = j-22.5;}j=225;int x1,x2,x3,y1,y2,y3;this->wbcircleEquation(140,j-pointer_number*4.5);x1=x;y1=y;this->wbcircleEquation(25,j-pointer_number*4.5-22.5);x2=x;y2=y;this->wbcircleEquation(25,j-pointer_number*4.5+22.5);x3=x;y3=y;this->wbdrawPointer(&wbpainter,x1,y1,x2,y2,x3,y3);this->wbdrawEllips(&wbpainter); }//接口函數 void WBgaugeone::setpointer_number(int pointer)//設置指針指向0-60 {if(pointer>=0&&pointer<=60){pointer_number = pointer;this->repaint();} } void WBgaugeone::setcolorarc(QColor rarc) //最外層圓弧顏色 {colorarc = rarc;this->repaint(); } void WBgaugeone::setcolorarc2(QColor rarc2) //中心圓漸變色起點顏色 {colorarc2 = rarc2;this->repaint(); } void WBgaugeone::setcolornumber(QColor number) //數字顏色 {colornumber = number;this->repaint(); } void WBgaugeone::setcolorline(QColor line) //度量標直線顏色 {colorline = line;this->repaint(); } void WBgaugeone::setcolorlips(QColor lips)//圓的終點顏色 {colorelips = lips;this->repaint(); } void WBgaugeone::setcolorpointer(QColor pointer)//指針顏色 {colorpointer = pointer;this->repaint(); }

總結

儀表盤
制作人:博咯
僅限他人學習,交流使用
void setpointer_number(int pointer);//設置指針指向0-60
void setcolorarc(QColor rarc); //最外層圓弧顏色
void setcolorarc2(QColor rarc2); //中心圓漸變色起點顏色
void setcolornumber(QColor number); //數字顏色
void setcolorline(QColor line); //度量標直線顏色
void setcolorlips(QColor lips);//圓的終點顏色
void setcolorpointer(QColor pointer);//指針顏色

該儀表盤主要通過QPainter進行繪制,可能有沉余代碼,可以更加簡潔,謝謝大家點贊及指導!

總結

以上是生活随笔為你收集整理的QT小控件-仪表盘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。