【QPushButton实现只响应长按的方法】

**引言:**之前查过不少关于实现长按的博客,但是好多方法在响应长按的同时也会同时响应短按,导致我们无法区分长按和短按的区别。

首先进入ui界面,对你需要的按钮右键生成槽函数,如下图所示:
在这里插入图片描述
我们需要创建这两个槽函数

为了实现长按这一行为,我们需要引入头文件 QTimer
同时为了方便控制QTimer的对象,我们把它声明在头文件中。
为了计数,我们需要声明一个press_time用来计时按了几秒。

我的头文件如下:

#ifndef USER_LOG_ITEM_H
#define USER_LOG_ITEM_H

#include <QWidget>
#include <QTimer>
#include <QDebug>
namespace Ui {
class user_log_item;
}

class user_log_item : public QWidget
{
    Q_OBJECT

public:
    explicit user_log_item(QWidget *parent = nullptr);
    ~user_log_item();
private slots:
    void on_pressTime_btn_pressed();
    void on_pressTime_btn_released();
private:
    Ui::user_log_item *ui;
    int press_time=0;
    QTimer *timer = new QTimer;
};

#endif // USER_LOG_ITEM_H

对两个槽函数的实现如下:

void user_log_item::on_pressTime_btn_pressed()
{
    connect(timer,&QTimer::timeout,this,[=]{
        press_time++;//每过1000毫秒press_time加一
        disconnect(timer,0,this,0);//先断开信号并将计数归零
        press_time=0;
        qDebug()<<"触发了长按";//这里可以改成你需要的长按后触发的函数
    });
    timer->start(1000);//这里是长按的时间,当按下按钮1000毫秒后才触发timeout这个信号。
}

void user_log_item::on_pressTime_btn_released()
{
    disconnect(timer,0,this,0);//这里是必须的,因为按下的时候就开始计时,所以松开时必须断开信号并将计数归零
    							//否则,实现的效果就是点击后,等待一秒就会输出debug信息 
    press_time=0;  
}

创作不易,觉得有用的朋友点赞收藏支持一下,谢谢!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值