QT小控件-遥控按钮

  • 前言
  • 二、使用步骤
    • 1.QT使用自定义控件
    • 2.程序如下:
    • 3.使用说明
  • 总结

前言

一共两种遥控控件,滑动式和点触式。

滑动式按钮 点触式按钮

二、使用步骤

1.QT使用自定义控件

  1. 创建一个基于MainWindows的UI工程,将遥控控件button文件放到工程所在目录中

  2. 在工程管理文件(.pro文件)中添加 include(button/wbcontrolbutton2.pri)

  3. 打开ui文件,拉取一个widget控件,并提升类为相应的类名


2.程序如下:


wbcontrolbutton2.pri:

INCLUDEPATH += $$PWD
HEADERS += button(所在目录)/wbcontrolbutton2.h
SOURCES += button(所在目录)/wbcontrolbutton2.cpp

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_H

wbcontrolbutton2.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小控件-遥控按钮相关推荐

  1. qt 小控件之textEdit

    获取 textedit 的文本内容:QString text = ui->textEdit->toPlainText(); 设置textedit 的文本内容:ui->textEdit ...

  2. qt开关控件设计(手把手从零开始)

    从零开始手把手教你设计自己的qt控件 1 说明 1.1 显示效果 1.2 控件特性 1.3 设计方法 2 控件需求分析 2.1 必要需求 2.1 顺带需求(锦上添花) 3 功能设计 3.1 设计思路( ...

  3. Qt常用控件介绍(一)

    Qt常用控件介绍 Qt Creator 的使用技巧 Qt Creator的常用快捷键 按钮 QPushButton QToolButton QRadioButton QCheckBox QComman ...

  4. mac下dashboard小控件开发实例(附源码)

    1.背景          用mac的用户都应该知道,mac有一个很好的功能,就是dashboard小控件的功能,按下F12键就可以自由切换.博主最近在背GRE单词,就尝试这开发了一个背单词的dash ...

  5. android组件开关按钮,简单聊聊“开关”这个小控件

    开关虽然只是一个小控件,看起来很简单,但其实它的设计也有着大学问.本文和你一起探讨一下~ 一.开关是什么 开关,英文Switch,常被翻译为开关.滑动开关.切换开关,作为界面中可直接操作的元件,提供两 ...

  6. Android 仿微信语音录音小控件

    Android 仿微信语音录音小控件 前段时间一直在做IM聊天这方面的撸码工作,涉及到了很多小控件,有时间我会慢慢给大家分享一下我的小成果,希望大家一起学习,一起进步,今天来和大家来说一下Androi ...

  7. QT UI控件和事件

    QT UI控件和事件 控件 自定义事件 事件 QEvent 鼠标事件 定时器 绘图事件 文件 控件 登录窗口布局 lable : 标签 (登录的用户名:) Line Edit : 单行的编辑框 (输入 ...

  8. 【转】Win32子窗口控件(按钮、编辑框、静态框、滚动条等)!!

    前言: 子窗口控件是特殊的子窗口,不需要我们注册窗口类,系统已经注册好了,我们只需要在创建时选择相应的窗口类名.常用的子窗口控件有按钮BUTTON.组合框COMBOBOX.编辑框EDIT.列表框LIS ...

  9. 转大佬--C++语言Qt实现控件拖拽和连线类似可视化操作Simulink仿真类软件 电路仿真软件 和模型驱动等软件

    转自–标biao的文章:https://blog.csdn.net/kangkanglhb88008/article/details/120812524 目标:开发一个电路仿真软件. 内部原理:qt编 ...

最新文章

  1. c++ opencv实现区域填充_使用OpenCV实现图像覆盖
  2. Mysql错误: Lock wait timeout exceeded 解决办法
  3. [leetcode]Trapping Rain Water @ Python
  4. VMProtect SDK完全避坑指南
  5. 「前端工程化」该怎么理解?
  6. linux6.5进入救援模式,rhel6.5救援模式修复系统
  7. c/c++多参数的问题
  8. type c pin定义_在C中定义宏以设置和清除PIN的位
  9. JSP+Servlet--简易的博客功能开发
  10. javascript HTMLElement
  11. hfs文件服务器如何上传文件,hfs文件服务器linux
  12. 干货警告!国外有个小姐姐给29篇经典机器学习论文写了总结 | 资源
  13. 【leetcode】链表题(python)
  14. 提高计算机访问硬盘的速度慢,嫌电脑速度不够快?教你5招提升硬盘性能!
  15. 中国电力电子行业前景方向预测及投资规划建议报告2022-2028年版
  16. Django 数据迁移导入导出
  17. 数据新时代 认知DMA基金会
  18. 详解项目管理中任务、成本、产品三者的关系
  19. Kruskal算法:将森林合并成树
  20. Visio使用技巧——改变环形箭头的箭头方向

热门文章

  1. Elasticsearch 出现 “429 rejected” 报错,怎么办?
  2. win10不能调节小爱同学音量
  3. PLC算法系列之数值微分器
  4. 大学“电路分析基础”试题合集第一章
  5. ROS 之 KUKA iiwa编程
  6. java.sql.SQLSyntaxErrorException: Unknown column ‘lastname‘ in ‘field list‘
  7. HashMap,HashTable,TreeMap,HashSet,TreeSet
  8. 一文详解微服务分布式架构
  9. 前端程序员必知:单页面应用的核心
  10. 智能手机背后隐藏的第二系统——RTOS