目录

  • 一、实现需求:鼠标hover时旋转
  • 二、实现方式:计时器做动画
  • 三、代码实现

QT旋转按钮控件的实现

一、实现需求:鼠标hover时旋转

需求是:实现类似于WINDOWS下,某些软件窗口关闭按钮的样式,

比如下图:WINDOWS某讯电脑管家的关闭按钮,鼠标hover时的效果,鼠标松开时的效果,目前没有要求,也就没实现,但是实现的原理的一样的

实现后的效果如下图:

二、实现方式:计时器做动画

PS:这里仅仅讲述旋转的实现,对于按钮:default样式,hover样式,click样式不做介绍;如果有更好的方式,希望大佬不吝赐教。
方法:
1、使用计时器;每隔一定的时间旋转一定的角度(当前是)
2、到达一定的角度后不再旋转,还原(当前是 90°就停止还原)
3、鼠标 hover 的时候,开始计时,旋转

三、代码实现

代码不全,但是依旧能够理解大概思想。

按钮使用的 QLabel 控件

CloseButton::CloseButton(QWidget *parent): QLabel(parent)
{// 其它操作..................default_closePix = QIcon(":/image/ukui-taskview-close-default.png").pixmap(btnSize.width(), btnSize.width());hover_closePix = QIcon("://image/ukui-taskview-close-hover.png").pixmap(btnSize.width(), btnSize.width());click_closePix = QIcon(":/image/ukui-taskview-close-click.png").pixmap(btnSize.width(), btnSize.width());m_pCircleTimer = new QTimer(this);m_pCircleTimer->setInterval(50);connect(m_pCircleTimer, &QTimer::timeout, this, &CloseButton::onTimeout);
}
void CloseButton::btnStateEnter()
{startCircle();setPixmap(hover_closePix);raise();return;
}

重点在于 m_nAngle 这个角度值的改变

void CloseButton::paintEvent(QPaintEvent *event)
{if (BTN_STATE_ENTER == m_btnState){QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;painter.setPen(Qt::transparent);QRect rect = this->rect();rect.setWidth(rect.width());rect.setHeight(rect.height());painter.translate(btnSize.width() / 2, btnSize.height() / 2); // 设置旋转中心painter.rotate(m_nAngle); // 旋转painter.translate(-(btnSize.width() / 2), -(btnSize.height() / 2)); // 将原点复位painter.drawPixmap(rect, hover_closePix);} else {QLabel::paintEvent(event);}
}void CloseButton::startCircle()
{m_pCircleTimer->start();
}

倒计时结束

void CloseButton::onTimeout()
{++m_nCirleCount;if(m_nAngle == 90) // 旋转 90度{m_nAngle = 0;}m_nAngle += 15 ;if(m_nCirleCount == 6){m_pCircleTimer->stop();m_nCirleCount = 0;}update();
}

QT旋转按钮控件的实现相关推荐

  1. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  2. qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...

    前言勇哥对于C语言,C++早些年有一些接触,这个系列贴子就记载一下C++应用框架的学习经验. 在写程序时,UI.基础类库.应用程序框架对于vc来讲,只能依靠MFC和QT了. 勇哥对MFC有很强的抵触, ...

  3. qt设置边框颜色_Qt开源作品14-导航按钮控件

    ## 一.前言 导航按钮控件,主要用于各种漂亮精美的导航条,我们经常在web中看到导航条都非常精美,都是html+css+js实现的,还自带动画过度效果,Qt提供的qss其实也是无敌的,支持基本上所有 ...

  4. QT上设置背景图不影响子控件以及按钮控件的透明化

    QT中设置背景图不影响子控件 QT中设置背景图的方法不少,我这里是直接使用stylesheet来设置背景图.如果直接在UI界面进行如下所示设置 border-image: url(:/resource ...

  5. qt建立一个按钮控件

    1.如果建立一个按钮控件 2.指定按钮控件的父对象 3.指定按钮控件的位置 4.设置按钮控件的大小 1.如果建立一个空间按钮 在头文件加上:#include<QPushButton>.(记 ...

  6. Qt 设计师-Qt Designer基础控件介绍

    Layouts: Vertical Layout:垂直布局 Horizontal Layout:水平布局 Gird Layout:栅格布局 FormLayout:表单布局 关于布局有很多博客写的很好就 ...

  7. 【DND图形库】五、按钮控件与音效

    五.按钮控件与音效 (甲)按钮控件 在DND.h里能看到有哪些控件,基本上都以静态工厂模式创建: ///GUI/// #include "DNDGUI.h" //GUI 控件基类 ...

  8. python 按钮控件_python实现360皮肤按钮控件示例

    python实现360皮肤按钮控件示例. 代码: #!/usr/bin/python #-*-coding:utf-8-*- #site www.jbxue.com from PyQt4.QtGui ...

  9. Qt QTableWidget表格控件的用法(非常详细)

    Qt QTableWidget表格控件的用法(非常详细) QTableWidget 是 Qt 提供的一种表格控件(如图 1 所示),类似于我们经常使用的 Excel 表格,可以将数据以表格的方式展示给 ...

最新文章

  1. 当pip安装因为网络超时而无法安装的时候慢
  2. 10-03视图的优缺点及注意事项
  3. [Google Guava] 1.1-使用和避免null
  4. 实验四 栈和队列的基本操作
  5. 【笔记】MATLAB中的图形(2)
  6. jquery通过attr取html里自定义属性原来这么方便啊
  7. 大于3小于4的整数bleem_比三大,比四小的整数是存在的吗?
  8. Java输出特定时间段特定格式时间信息
  9. html应用json 文件_安全研究 | Slack桌面应用程序的RCE漏洞+XSS漏洞
  10. postgresql mysql数据类型_PostgreSQL和mysql数据类型对比兼容
  11. 信息学奥赛一本通1159:斐波那契数列
  12. 计算机常用英语单词(带音标)
  13. [linux]记录内核编译日志
  14. bridge和camera raw
  15. 无法获取链接服务器 (null) 的 OLE DB 访问接口 SQLNCLI10 的架构行集
  16. iOS模拟器iOS Simulator详细图文使用教程
  17. unity ios系统相机相册 IOS16 自动横屏
  18. 自动复制吱口令html,使用clipboard.js实现复制吱口令功能的示例代码
  19. HTML:超文本标记语言
  20. 甘肃省定西市谷歌卫星地图下载

热门文章

  1. Hyperledger Fabric 智能合约实战 (5) sdk node软件安装
  2. 《研磨设计模式》chap9 原型模式Prototype
  3. 劳动力工资调整模型的探讨——数学建模
  4. HBNIS-crypto
  5. (35)3环PEB断链
  6. GetFileAttributesEx读取文件相应属性
  7. Codeforces Round #490 (Div. 3)【完结】
  8. 1128 N Queens Puzzle (20 分)【难度: 一般 / 知识点: 模拟】
  9. 1065 A+B and C (64bit) (20 分)【难度: 简单 / 思维 高精度】
  10. SQL语言之索引(Oracle)