Qt實現圓形組合按鈕,搖桿

最近由於項目需要,在軟件上畫一個組合按鈕實現搖桿的功能,以控制機器人移動的方向,借鑑了前行中的小豬的代碼https://blog.csdn.net/GoForwardToStep/article/details/79124025,最終效果如下

支持更改文本和背景顏色,代碼較醜,希望有志之士完善

CustomButton.h
#include <QtWidgets/QWidget>

#include <QPoint>
#include "qmath.h"

enum QUADRANT_NUM {
    QUADRANT_UP,
    QUADRANT_LEFT,
    QUADRANT_DOWN,
    QUADRANT_RIGHT,
    QUADRANT_NO_DEFINE,
};

class CustomButton : public QWidget
{
    Q_OBJECT

public:
    CustomButton(QWidget* parent = NULL);
    // 設置弧長及半徑;
    void setRadiusValue(int radius);
    void setArcLength(int arcLength);
    void drawRotatedText(QPainter *painter, float degrees, int x, int y, const QString &text);

    QPixmap getPixmap(const int ping);
    QColor getColor(const int ping);
    int getLineNum(const int ping);
    QPixmap getSignalPixmap(const QColor &color,const int lineNum);//獲取信號位圖

	void setBeginDegree(int degree);



    void setStrUp(QString str){mStrUp = str;}
    void setStrLeft(QString str){mStrLeft = str;}
    void setStrDown(QString str){mStrDown = str;}
    void setStrRight(QString str){mStrRight = str;}

    void setTextModeEn(bool mode){m_bTextModeEn = mode;}


    void setSPLcolor(QColor color){colorSPL = color;update();}
    void setSectorColor(QColor color){mSectorColor = color;update();}
    void setBKGcolor(QColor color){colorBKG = color;update();}
    void setWidgetStyle(QString style);

    void setAxesVertical(bool axesVertical);

private:
     // 初始化按鈕;
    void initButton();
    // 繪製按鈕; 
    void paintEvent(QPaintEvent *);
    // 添加圓弧;
    void addArc(int x, int y, int startAngle, int angleLength, QColor color);

    // 鼠標事件;
    void mouseMoveEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);

    int analysisAngle(int x,int y);

signals:
    // 鼠標點擊;
    void signalButtonClicked(int buttonId);
    // 鼠標鬆開;
    void signalButtonReleased(int buttonId);
private:
    // 弧長及半徑;
    int m_radius, m_arcLength;

    // 圓弧路徑;
    QList<QPainterPath> m_arcPathList;
    QList<QPainterPath> m_textPathList;
    // 圓弧顏色;
    QList<QBrush> m_colorList;
    // 當前鼠標按鈕/進入 按鈕的索引;
    int m_pressIndex, m_enterIndex;
    // 鼠標事件標誌位;
    bool m_isMousePressed;
    bool m_isMouseEntered;

    QUADRANT_NUM mCurWorkRegion;

    QPoint mCenterRound;
    QPixmap mDegreePixmap;

    QString mStrUp;
    QString mStrLeft;
    QString mStrDown;
    QString mStrRight;

	bool m_bTextModeEn;

    QColor mSectorColor;


    //beijing分割線顏色
    QColor colorBKG = QColor(41, 44, 50);
    QColor colorSPL = QColor(32, 149, 216);
    QColor colorSectorUp2 = QColor(68, 68, 68);
    QColor colorSectorUp = QColor(60, 60, 60);
    QColor colorSectorDown = QColor(22, 22, 22);

    QColor colorbgGradient0 = QColor(24, 24, 24);
    QColor colorbgGradient1 = QColor(53, 57, 63);

    QColor colorExcircle0 = QColor(68, 68, 68);
    QColor colorExcircle5 = QColor(37, 40, 46);
    QColor colorExcircle9 = QColor(22, 22, 22);

    QColor colorInnerCircle0 = QColor(38, 40, 46);
    QColor colorInnerCircle9 = QColor(45, 48, 55);

    bool mAxesVertical = false;

};










有志之士完善後還望不吝賜教

完整代碼:https://download.csdn.net/download/yu_20501253/11192876

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章