Qt:QPushButton 单击、双击响应区分

本文介绍了在Qt环境下,由于QPushButton在双击事件中会先触发单击事件,导致处理不便的问题。作者通过子类化QPushButton并使用定时器来区分单击和双击事件。当接收到单击事件时启动定时器,若定时器触发前未发生第二次单击,则视为单击事件;反之,若发生双击或第二次单击,视为双击事件。需要注意定时器只能触发一次,且在mouseRelease事件中判断是否已触发过doubleclick,以防止无限循环。文章建议定时器间隔不宜低于10ms,并鼓励读者自行测试或研究Qt源码以了解双击响应的精确判断方式。
摘要由CSDN通过智能技术生成

开发环境:win10+vs2015+qt5.9.1

背景:QPushButton的双击事件虽然一直有,但是在双击完成之前,总会响应到单击的事件处理或者连接槽,使用很不方便。自己子类化了一个QPushButton来区分这两种点击事件的处理

 1 /*
 2 * Description: 分开响应单击和双击的QPushButton
 3 * Author: 公子开明 KaiMing Prince
 4 * Detail: 默认的QPushButton,双击事件触发前会先触发单击事件,影响两个操作的分别处理
 5 * Class: DoubleClickedButton
 6 * Implement: 本类实现了QPushButton双击和单击的分别处理事件
 7 */
 8 #ifndef _DOUBLE_CLICKED_BUTTON_H__
 9 #define _DOUBLE_CLICKED_BUTTON_H__
10 #include <QPushButton>
11 
12 class QTimer;
13 
14 class DoubleClickedButton : public QPushButton
15 {
16     Q_OBJECT
17 
18 public:
19     DoubleClickedButton(QWidget *parent=Q_NULLPTR);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 中,QPushButton 类没有直接提供双击信号,但您可以通过重新实现 mouseDoubleClickEvent() 函数来捕获 QPushButton双击事件。 以下是一个示例代码: ```cpp // 假设有一个 QPushButton 对象:pushButton // 在构造函数或其他适当的位置连接双击事件 connect(pushButton, &QPushButton::clicked, this, &YourClass::handlePushButtonClicked); // 重新实现 mouseDoubleClickEvent() 函数 void YourClass::mouseDoubleClickEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { // 检查是否是左键双击事件 // 在这里处理双击事件 handlePushButtonDoubleClicked(); } // 将事件传递给父类处理,以确保按钮的正常行为 QPushButton::mouseDoubleClickEvent(event); } // 处理单击事件的槽函数 void YourClass::handlePushButtonClicked() { // 处理单击事件的逻辑 } // 处理双击事件的槽函数 void YourClass::handlePushButtonDoubleClicked() { // 处理双击事件的逻辑 } ``` 在上面的示例中,我们将 QPushButton 的 clicked 信号连接到了 handlePushButtonClicked 槽函数。然后,我们重新实现了 mouseDoubleClickEvent() 函数来捕获鼠标的双击事件。在函数中,我们检查鼠标按钮是否是左键,并调用 handlePushButtonDoubleClicked() 槽函数来处理双击事件。 请注意,在重新实现 mouseDoubleClickEvent() 函数时,需要调用 QPushButton 的父类的 mouseDoubleClickEvent() 函数,以确保按钮的正常行为。 以上是一种捕获 QPushButton 双击事件的方法,供参考。您可以根据自己的需求来实现适合您的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值