最近使用Qt時(shí),在增加一個(gè)按下某鍵(M),臨時(shí)顯示圖層,鍵(M)彈起時(shí)隱藏圖層的功能時(shí),碰到了一些問(wèn)題: keyPressEvent 事件不響應(yīng)
這個(gè)問(wèn)題,網(wǎng)上搜到的結(jié)果是可能是控件沒(méi)獲取焦點(diǎn),比如QPushButton一直占著焦點(diǎn),可是界面上并沒(méi)有焦點(diǎn),而且,在keyPressEvent 和keyReleaseEvent 中同時(shí)打出日志,keyReleaseEvent 里面是可以響應(yīng)的
最后找出來(lái)結(jié)果是因?yàn)樵谄溆嗟胤绞褂昧丝旖萱I,代碼如下:
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的時(shí)候輸出:
shortcut--------------->按下
keyReleaseEvent
shortcut
keyReleaseEvent
shortcut
keyReleaseEvent
...
shortcut
keyReleaseEvent ----->彈起
也就是說(shuō)設(shè)置快捷鍵之后,是無(wú)法觸發(fā)keyPressEvent 事件的
如果想去掉中間重復(fù)的這部分,可以這樣(網(wǎng)上搜索說(shuō)是要自己設(shè)置flag,額,我沒(méi)設(shè)置flag,好像也沒(méi)什么問(wèn)題)
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 ";
}
這樣輸出變?yōu)?/p>
shortcut --------------->按下
keyReleaseEvent ------->彈起