Qt 中KeyPressEvent獲取不到Key_Space等事件,有2種方式:
- 類的構造函數中增加setFocusPolicy;
- 通過eventFilter()過濾事件。
一、原因
QT類獲取鍵盤焦點時才可以獲取事件,當頁面布局復雜時,焦點可能不在該類中。
二、類構造函數中添加setFocusPolicy
進入界面時需點擊一下界面,在簡單界面(如裁切圖片)可以應用。
//在qt類構造函數中加入
setFocusPolicy(Qt::StrongFocus);
//在void keyPressEvent(QKeyEvent *e)中加入
if (e->key() == Qt::Key_Space)
{
Doing();
}
三、通過eventFilter()過濾事件
//在qt類構造函數中加入
setFocusPolicy(Qt::StrongFocus);
installEventFilter(this);
//在bool eventFilter(QObject* object, QEvent* event)加入
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Space)
{
Doing();
}
}
return false;
