Qt keyPressEvent keyReleaseEvent 分析


最近使用Qt時,在增加一個按下某鍵(M),臨時顯示圖層,鍵(M)彈起時隱藏圖層的功能時,碰到了一些問題: keyPressEvent 事件不響應

這個問題,網上搜到的結果是可能是控件沒獲取焦點,比如QPushButton一直占着焦點,可是界面上並沒有焦點,而且,在keyPressEvent 和keyReleaseEvent 中同時打出日志,keyReleaseEvent 里面是可以響應的

最后找出來結果是因為在其余地方使用了快捷鍵,代碼如下:

test::test()
{
    QShortcut* shortcut = new QShortcut(QString("M"),this);
    QObject::connect( shortcut ,&QShortcut::activated,[=]{
        qDebug()<<"shortcut";
    });
}

void test::keyPressEvent (QKeyEvent* event)
{
    qDebug()<<"keyPressEvent ";
}
void test::keyReleaseEvent (QKeyEvent* event)
{
    qDebug()<<"keyReleaseEvent ";
}

按M的時候輸出:

shortcut--------------->按下
keyReleaseEvent 
shortcut
keyReleaseEvent 
shortcut
keyReleaseEvent 
...
shortcut
keyReleaseEvent ----->彈起

也就是說設置快捷鍵之后,是無法觸發keyPressEvent 事件的

如果想去掉中間重復的這部分,可以這樣(網上搜索說是要自己設置flag,額,我沒設置flag,好像也沒什么問題)

test::test()
{
    QShortcut* shortcut = new QShortcut(QString("M"),this);
    shortcut ->setAutoRepeat(false);
    QObject::connect( shortcut ,&QShortcut::activated,[=]{
        qDebug()<<"shortcut";
    });
}

void test::keyReleaseEvent (QKeyEvent* event)
{
   if(event->isAutoRepeat())
      event->ignore();
   else
      qDebug()<<"keyReleaseEvent ";
}

這樣輸出變為

shortcut --------------->按下
keyReleaseEvent  ------->彈起


免責聲明!

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



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