一、简述

在上一篇文章中我们讲述了如何实现不规则按钮( Qt简述如何实现不规则按钮),其中提到了另外一种方法就是自绘,今天就此谈一谈如何自绘实现一个圆盘式的按钮。下面先看一张效果图。

二、代码之路

其实实现很简单,就是通过Qt的QPainterPath来实现圆弧式按钮的绘制,然后通过鼠标事件实现点击效果及点击信号的发送。因为正常QPushButton或者QToolButton是自己发送clicked或者pressed、release等信号的,既然我们是通过自绘而不是继承button,那这些信号都需要我们自己来实现了,如果不知道具体按钮的某个信号是如何发送的或者是何时发送的可以参考源码。下面直接上代码。

CustomButton.h

#pragma once#include <QtWidgets/QWidget>class CustomButton : public QWidget
{Q_OBJECTpublic:CustomButton(QWidget* parent = NULL);// 设置弧长及半径;void setRadiusValue(int radius);void setArcLength(int arcLength);
private:// 初始化按钮;void initButton();// 绘制按钮; void paintEvent(QPaintEvent *);// 添加圆弧;void addArc(qreal startAngle, qreal angleLength, QRgb color);// 鼠标事件;void mouseMoveEvent(QMouseEvent *event);void mousePressEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);// 鼠标离开事件;void leaveEvent(QEvent *event);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;};

可以自己设置颜色,文字,圆弧角度,圆弧按钮数目,圆弧长度等,也可以以此为基础进行拓展。以上就完成了不规则按钮之自绘圆盘式按钮。其他类似不规则的按钮也可以通过自绘实现,没有做不到,只有想不到。

加群下载源码 311750285

参考

Qt之图形(绘制漂亮的圆弧)

Qt实现不规则按钮之自绘圆盘式按钮相关推荐

  1. Qt中不规则窗体和部件的实现

    Qt中不规则窗体和部件的实现 描述:a.png 窗口背景图 图片: 描述:mask.png 窗口掩码图 图片: 描述:toolbutton.png 按钮背景图 图片: 描述:toolbutton_ma ...

  2. php手绘功能,基于纯CSS3的6种手绘涂鸦按钮效果

    简要教程 这是一组非常有趣的纯CSS3手绘风格卡通按钮设计效果.这组手绘风格按钮共6种不同的效果,它们以手绘涂鸦的方式,以不同的按钮边框线条宽度和虚线来构成按钮,效果非常不错. 使用方法 HTML结构 ...

  3. 【转】QT实现不规则窗体

    看到好文章,收藏一下: 看到网上有很多不规则窗体的实现,效果很酷.于是使用QT也实现了一个,QT的不规则窗体实现非常简单,只需要设置一个mask(遮掩)图片,这个图片的格式可以使用png或bmp格式, ...

  4. c语言自绘按钮例子,MFC自绘Button按钮分析和实现

    对于按压式的Button按钮,WM_CTLCOLOR无法完成按钮控件的背景颜色和字体颜色修改,若想要完成外观定制需要添加WM_DRAWITEM消息或者重写CButton类中的DrawItem函数完成按 ...

  5. MFC开发IM-自绘按钮控件,给按钮设置背景图片

    MFC 基础知识:对话框背景添加图片和按钮Button添加图片 很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回 ...

  6. 在GridView中添加按钮后,如何触发按钮的各种事件?

    //在GridView中添加按钮后,如何触发按钮的各种事件? 1.在GridView的"编辑列"属性窗口中,增加新的Botton列. 2.然后再该窗口右边属性中,将外观项下的But ...

  7. [html] 使用button当按钮和使用div当按钮有什么区别?

    [html] 使用button当按钮和使用div当按钮有什么区别? button具有默认样式 button在表单中具有默认的提交事件 button具有disabled属性可以禁用 个人简介 我是歌谣, ...

  8. 单选按钮_PerlTk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton(附完整代码)...

    <Perl-Tk教程之按钮Button.复选按钮Checkbutton.单选按钮Radiobutton>Perl-Tk中有三种不同形式的按钮组件可供选择,它们分别是按钮(Button), ...

  9. Java事件侦听器函数_SWT 计算器 按钮事件监听 获取按钮text值

    用swt插件做计算器,监听所有按钮.通过按钮text值判断哪个按钮被点击,如"0"按钮被点击,就在text框里加个0.现在问题是怎样在监听函数里得到button的text值.10个 ...

最新文章

  1. UIAutomatorViewer、Inspector获取元素信息
  2. QTP连接oracle
  3. 抢先体验SQL Server 2014 CTP1!
  4. 云南省初中计算机说课稿,云南省实验教材《信息技术》说课稿范文.docx
  5. 微信公众开发api接口
  6. Python基于OpenCV的人脸检测
  7. MS SQLSERVER中如何快速获取表的记录总数
  8. python学习笔记六 初识面向对象上(基础篇)
  9. 《OD学spark》20161022
  10. 解密车载语音识别架构 车载系统能听懂人说话?
  11. 「09」真损啊!——损失函数与极大似然估计
  12. 让两个灯隔断时间交替闪烁的电路
  13. matlab经验正交分解函数EOF的实现—基于Climate Data Toolbox操作
  14. 火灾烟雾检测数据集和yolov4-yolov5检测模型
  15. SpringMVC Hello World
  16. nfine框架连接oracle,NFine快速开发框架(无后门)
  17. Hamcrest匹配器框架
  18. 防火墙基础:ISA Server 防火墙客户端和Forefront TMG 客户端介绍
  19. Sage x3周期性凭证帮助企业提升财务效率
  20. 多部分元件原理图封装的画法

热门文章

  1. 使用MQTT连接华为云的物联网平台(二)
  2. 如何完全卸载office
  3. 计算机控制基础冯勇,研究生导师冯勇:哈尔滨工业大学
  4. 霍金质疑超光速粒子发现:需要更多实验确认
  5. jmeter-计数器使用
  6. php excel 高度,PHPExcel:根据图像设置行高(以像素为单位)
  7. 【ShaderGraph】道路引导,小溪流水等UV动画效果
  8. pycuda使用方法
  9. python怎么粘贴字进去_通过python粘贴到输入字段上
  10. 知识分享 | 如何让5S管理行之有效