最近由于项目需要,在软件上画一个组合按钮实现摇杆的功能,以控制机器人移动的方向,借鉴了前行中的小猪的代码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_OBJECTpublic: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

Qt实现圆形组合按钮,摇杆相关推荐

  1. Qt中如何给按钮加图标(背景图片)

    Qt中如何给按钮加图标(背景图片) 1. Qt Designer中拖入一Tool Button 2. 选择图标的图片放入工程目录下,如放在Resources内 3. 双击工程的Resource Fil ...

  2. [原译]一步步教你制作WPF圆形玻璃按钮

    图1 1.介绍 从我开始使用vista的时候,我就非常喜欢它的圆形玻璃按钮.WPF最好的一个方面就是允许自定义任何控件的样式.用了一段时间的Microsoft Expression Blend后.我做 ...

  3. QML | 自定义圆形图片按钮

    在一个项目中需要做一个圆形图片按钮的列表,就自己实现了下. 此按钮有两个自定义属性,分别表示按钮按下时和未按下时候显示的图片,还有一个rbClicked信号为按钮点击的响应信号. //RoundBut ...

  4. 第52篇 QML自定义组件 — 组件化图片文字组合按钮

    目录 1.前期准备 2.组件化图片文字组合按钮 (1)透露属性说明 property int layoutImageText: 0

  5. Qt实现圆形头像,支持Url和本地图片

    Qt实现圆形头像,支持Url和本地图片 前言 一.效果演示 二.源代码 三.使用示例 前言 支持显示远程url请求过来的图片数据,需要对应的ssl动态库 支持显示本地图片. 一.效果演示 二.源代码 ...

  6. 随笔:Qt变色图像三态按钮

    //! //! 随笔:Qt变色图像三态按钮 //! //! == 控件简介 == //! 本次提供继承QWidget的按钮控件,提供显示图片功能, //! 可根据图片透明度设置前景色和后景色,可添加边 ...

  7. QML入门教程(10) : QML圆形延时按钮

    QML提供了延时按钮DelayButton,我们可以对其自定义,如下图: 代码 import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuic ...

  8. 【Qt】QMainWindow最大化按钮是灰色(不能最大化)的解决方法

    解决方法 设置最大尺寸为16777215,并且使能Qt::WindowMaximizeButtonHint(默认就是使能的,不执行也可以) const QSize MAIN_SIZE_MAX = QS ...

  9. Qt控件与按钮颜色透明

    QT设置按钮控件透明: 代码://设置按钮 背景 前景 this->ui->ShowCvRGB->setStyleSheet(QString("color:rgba(255 ...

  10. QT一次性连接多个按钮槽函数

    文章目录 前言 一.使用步骤 1.初始化 2.槽函数 总结 前言 场景:如果QT界面上面有许多按钮,如果一个按钮连接一个信号对应一个槽函数,那么函数太多了,代码结构乱 以下是本篇文章正文内容,下面案例 ...

最新文章

  1. Tomcat 和 JVM 的性能调优总结
  2. 使用数据库中的Java流制作数据透视表
  3. win7系统升服务器版本,WIN7专业版可update补丁,WIN7旗舰版无法update补丁,WSUS服务器是按windows类型还是版本区别updata的还是其他什么方式...
  4. 如何使用SAP Cloud for Customer里的ABSL代码调用Web service
  5. 江苏省专转本计算机题知识点,江苏专转本计算机真题17
  6. Raft与MongoDB复制集协议比较
  7. P3372 【模板】线段树 1
  8. Java二叉搜索树转循环链表,关于java:二叉搜索树转换为单向链表interview1712
  9. 【推荐精读】从item-base到svd再到rbm,多种Collaborative Filtering(协同过滤算法)从原理到实现
  10. [EXUI][原创]菜单简单创建和点击事件的触发
  11. 模型调参:概述【weight_decay、base_lr、lr_policy、clip_norm】【超参数调优方式:网格搜索(尝试所有可能组合)、随机搜索(在所有可能组合中随机选取参数组合)】
  12. 【Unity3D】初学加密技巧(反破解)
  13. 计算机关闭系统剪切板上的内容,如何在Win10中打开/关闭和清除剪贴板历史记录...
  14. 知网HTML阅读是什么,HTML – 屏幕阅读器究竟是什么?我应该如何处理我的网站?...
  15. 自反ACL实验(GNS3)
  16. (转)s3c6410 开发板Linux系统支持 K9GAG08U0E的方法
  17. 【嵌入式】MCU外接Flash图片数据存取实例
  18. An error occurred while starting the application
  19. 【审稿意见】科研菜鸟如何攥写审稿意见?万能模板!!!
  20. QPython+uiautomator2安卓手机自动化脚本编写

热门文章

  1. 苹果手机服务器维护中是什么意思,苹果手机故障全解析-苹果维修服务
  2. MOOC·嵩天老师团队·北京理工大学:《Python语言程序设计》自学笔记
  3. 阿里云域名和ip绑定具体内容步骤
  4. CSS绝对定位使用left:50%实现水平居中偏左问题
  5. 数字信号传输理论 Nyquist准则
  6. 蓝牙、Wifi与ZigBee无线传输技术中,谁比较占有优势
  7. C#今日头条推荐新闻爬取
  8. 液晶面板的表面缺陷及其检测方法
  9. Youtube视频传输规律
  10. 【安全狐】CVE-2015-5254_ActiveMQ反序列化漏洞复现