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