QT小控件-遥控按钮
生活随笔
收集整理的這篇文章主要介紹了
QT小控件-遥控按钮
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
QT小控件-遙控按鈕
- 前言
- 二、使用步驟
- 1.QT使用自定義控件
- 2.程序如下:
- 3.使用說明
- 總結
前言
一共兩種遙控控件,滑動式和點觸式。
滑動式按鈕 點觸式按鈕
二、使用步驟
1.QT使用自定義控件
創建一個基于MainWindows的UI工程,將遙控控件button文件放到工程所在目錄中
在工程管理文件(.pro文件)中添加 include(button/wbcontrolbutton2.pri)
打開ui文件,拉取一個widget控件,并提升類為相應的類名
2.程序如下:
wbcontrolbutton2.pri:
wbcontrolbutton2.h:
#ifndef WBCONTROLBUTTON2_H #define WBCONTROLBUTTON2_H#include <QWidget> #include <math.h> #include <QPainter> #include <QtCore> #include <QFontMetrics> #include<QPoint> #include<Qt> #include<QMouseEvent> #include <QDebug> class WBcontrolbutton2 : public QWidget {Q_OBJECTpublic:WBcontrolbutton2(QWidget *parent = 0);void setcolorarc2(QColor rarc2); //中心圓漸變色起點顏色void setcolorlips(QColor lips);//圓的終點顏色void setcolorpointer(QColor pointer);//指針顏色void setcolorpointer2(QColor pointer);//指針顏色 signals:void Go_Diection(int x); //1上,2左,3下,4右,5停止 private:QColor colorarc2;//圓漸變色起點顏色QColor colorelips;//圓漸變色終點顏色及圓輪廓的顏色QColor colorpointer;//指針顏色QColor colorpointer2;//指針顏色(鼠標按下后的顏色)QPen pen;//線QBrush brush;//刷子QRect rect;//視口int x, y; //圓邊上的坐標,執行wbcircleEquation()改變x,yint pointx,pointy;//鼠標按下坐標 protected:void paintEvent(QPaintEvent *); // void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *);void mousePressEvent(QMouseEvent *event);void wbcircleEquation(int r, double j); //根據角度,獲取圓邊上 點的坐標void wbdrawEllips(QPainter *painter);//畫圓void wbdrawPointer(QPainter *painter, int x1,int y1, int x2,int y2, int x3, int y3, QColor colorpainter);//畫指針(三角) };#endif // WBCONTROLBUTTON2_Hwbcontrolbutton2.cpp:
#include "wbcontrolbutton2.h"WBcontrolbutton2::WBcontrolbutton2(QWidget *parent) :QWidget(parent) {colorarc2 = Qt::white;//圓漸變色起點顏色colorelips = Qt::black;//圓漸變色終點顏色及圓輪廓的顏色colorpointer = Qt::blue;//指針顏色colorpointer2 = Qt::red;//指針顏色(鼠標按下后的顏色)pointx = 0;pointy = 0;this->resize(500,500);this->repaint(); } void WBcontrolbutton2::wbcircleEquation(int r ,double j)//根據x坐標獲得圓的y坐標,sign判斷y的正負性 {double val = 3.14159265 / 180;if (j<=270 && 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 WBcontrolbutton2::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);rect.setRect(-200,-200,400,400);QRadialGradient radial = QRadialGradient(0,0,200,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 WBcontrolbutton2::wbdrawPointer(QPainter *painter,int x1,int y1, int x2,int y2, int x3, int y3, QColor colorpainter)//畫指針 {pen = QPen();pen.setWidth(1);//25pen.setColor(colorpainter);pen.setStyle(Qt::SolidLine);pen.setCapStyle(Qt::RoundCap);pen.setJoinStyle(Qt::BevelJoin);painter->setPen(pen);brush = QBrush();brush.setColor(colorpainter);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 WBcontrolbutton2::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->wbdrawEllips(&wbpainter);for (int i=0;i<4;i++){int x1,x2,x3,y1,y2,y3;this->wbcircleEquation(150,i*90);x1= x;y1 = y;this->wbcircleEquation(100,i*90-30);x2= x;y2 = y;this->wbcircleEquation(100,i*90+30);x3= x;y3 = y;this->wbdrawPointer(&wbpainter,x1,y1,x2,y2,x3,y3,colorpointer);}int area_x = this->width()/3;int area_y = this->height()/3;if(pointx>=area_x&&pointy<=area_y&&pointx<area_x*2&&pointy>0) //上{int x1,x2,x3,y1,y2,y3;this->wbcircleEquation(150,90);x1= x;y1 = y;this->wbcircleEquation(100,90-30);x2= x;y2 = y;this->wbcircleEquation(100,90+30);x3= x;y3 = y;this->wbdrawPointer(&wbpainter,x1,y1,x2,y2,x3,y3,colorpointer2);emit(Go_Diection(1));}else if(pointx>=0&&pointy>=area_y&&pointx<area_x&&pointy<area_y*2) //左{int x1,x2,x3,y1,y2,y3;this->wbcircleEquation(150,2*90);x1= x;y1 = y;this->wbcircleEquation(100,2*90-30);x2= x;y2 = y;this->wbcircleEquation(100,2*90+30);x3= x;y3 = y;this->wbdrawPointer(&wbpainter,x1,y1,x2,y2,x3,y3,colorpointer2);emit(Go_Diection(2));}else if(pointx>area_x&&pointy>area_y*2&&pointx<area_x*2&&pointy<area_y*3) //下{int x1,x2,x3,y1,y2,y3;this->wbcircleEquation(150,3*90);x1= x;y1 = y;this->wbcircleEquation(100,3*90-30);x2= x;y2 = y;this->wbcircleEquation(100,3*90+30);x3= x;y3 = y;this->wbdrawPointer(&wbpainter,x1,y1,x2,y2,x3,y3,colorpointer2);emit(Go_Diection(3));}else if(pointx>area_x*2&&pointy>area_y&&pointx<area_x*3&&pointy<area_y*2) //右{int x1,x2,x3,y1,y2,y3;this->wbcircleEquation(150,0);x1= x;y1 = y;this->wbcircleEquation(100,-30);x2= x;y2 = y;this->wbcircleEquation(100,30);x3= x;y3 = y;this->wbdrawPointer(&wbpainter,x1,y1,x2,y2,x3,y3,colorpointer2);emit(Go_Diection(4));} }void WBcontrolbutton2::mousePressEvent(QMouseEvent *event) {QPoint point;if (event->button() == Qt::LeftButton){point = event->pos();pointx = point.x();pointy = point.y();this->repaint();} } void WBcontrolbutton2::mouseReleaseEvent(QMouseEvent *) {pointx = 0;pointy = 0;this->repaint();emit(Go_Diection(5)); } //接口函數 void WBcontrolbutton2::setcolorarc2(QColor rarc2) //中心圓漸變色起點顏色 {colorarc2 = rarc2;this->repaint(); } void WBcontrolbutton2::setcolorlips(QColor lips)//圓的終點顏色 {colorelips = lips;this->repaint(); } void WBcontrolbutton2::setcolorpointer(QColor pointer)//指針顏色 {colorpointer = pointer;this->repaint(); } void WBcontrolbutton2::setcolorpointer2(QColor pointer)//指針顏色 {colorpointer2 = pointer;this->repaint(); }3.使用說明
按鈕
制作人:博咯
僅限學習和交流之用。
void setcolorarc2(QColor rarc2); //中心圓漸變色起點顏色
void setcolorlips(QColor lips);//圓的終點顏色
void setcolorpointer(QColor pointer);//指針顏色
void setcolorpointer2(QColor pointer);//指針顏色
signals:
void Go_Diection(int x); //1上,2左,3下,4右,5停止
鼠標左鍵按下三角符號,釋放為停止
總結
該按鈕主要通過QPainter進行繪制,可能有沉余代碼,可以更加簡潔,謝謝大家點贊!
文件下載:https://download.csdn.net/download/qq_39641107/39662590
總結
以上是生活随笔為你收集整理的QT小控件-遥控按钮的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cutterman插件
- 下一篇: 感谢DiskGenius,我的数据终于恢