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的所有子類都適用

結論:

  1. pressed最先執行,相當於按下操作
  2. 按下之后,按鈕狀態發生變化,觸發toggled
  3. clicked最后執行,相當於彈起操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM