最近使用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 ------->彈起