QT从入门到入土之常用控件(五)——按钮长按事件分析

**

引言

**
最近在做qt项目,需要对button按钮添加一个长按事件(比如点击按钮,开始运动。松开按钮,运动停止)。查了些许资料,(差点误把QPushButton的press信号和长按事件混淆)在此记录一下经验。

setAutoRepeat
以前一直以为QPushButton不支持长按,才发现还有这个功能。用起来很简单:

 QPushButton *pBtnSub = new QPushButton(this);
    pBtnSub->setAutoRepeat(true); //启用长按
    pBtnSub->setAutoRepeatDelay(400);//触发长按的时间
    pBtnSub->setAutoRepeatInterval(50);//长按时click信号间隔
    connect(pBtnSub,&QPushButton::clicked,[&]{
        qDebug()<<"send";    

其实在这之前我瞄了眼MouseEvent,它是没有repeat这个东西的,所以一个按钮被鼠标点击还能连续触发,那基本就是一个定时器做出来的。
所以应该说是鼠标按下Delay时间后会启动一个多次触发的TimerEvent(定时器),由timeOut再次触发click槽。

QPushButton 点击信号分析
再来分析一下QPushButton的点击信号。QPushButton有三个很重要的信号跟点击有关:

pressed
clicked
toggled
表面上看,pressed和clicked都会在点击按钮时触发,它们有什么区别呢?toggled好像有时候触发,有时候不触发,到底怎么回事呢?下面就一起聊一下这三个信号

验证过程就不放了,直接给结论吧!

首先,这三个信号都是从QAbstractButton继承来的,也就是说,下面情况对QAbstractButton的所有子类都适用

结论:

pressed最先执行,相当于按下操作
按下之后,按钮状态发生变化,触发toggled
clicked最后执行,相当于弹起操作

你可能感兴趣的:(QT系列,qt,ui,c++,服务器,tcp/ip)