Qt keyPressEvent keyReleaseEvent 分析

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

這個問題,網上搜到的結果是多是控件沒獲取焦點,好比QPushButton一直佔着焦點,但是界面上並無焦點,並且,在keyPressEvent 和keyReleaseEvent 中同時打出日誌,keyReleaseEvent 裏面是能夠響應的日誌

最後找出來結果是由於在其他地方使用了快捷鍵,代碼以下:code

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 事件的event

若是想去掉中間重複的這部分,能夠這樣(網上搜索說是要本身設置flag,額,我沒設置flag,好像也沒什麼問題)test

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  ------->彈起
相關文章
相關標籤/搜索