Qt 獲取鍵盤按鍵(keyEvent獲取不到方向鍵及空格鍵)
阿新 • • 發佈:2020-12-24
需求:獲取方向鍵然後操作。
問題:qt 類使用void keyPressEvent(QKeyEvent *event);判斷方向鍵時出現獲取不到按鍵事件
原因:在QT類獲取鍵盤焦點時才可以獲取事件。(在介面比較複雜時,焦點很可能不在當前QT類)
解決方法:
1.在類的建構函式中新增:
1 setFocusPolicy(Qt::StrongFocus);
2 //只能解決特別簡單介面,而且剛進入介面時需點選一下介面
2.在eventFilter()事件篩選器中篩選出來:(當焦點被子控制元件如輸入文字等控制元件獲取的時候,是無法觸發eventFiter,但這就已經滿是我的功能需求了)
1 //在qt類建構函式中加入
2 setFocusPolicy(Qt::StrongFocus);
3 installEventFilter(this);
4
5
6
7 //在bool eventFilter(QObject* object, QEvent* event)加入
8 if (event->type() == QEvent::KeyPress)
9 {
10 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
11 int i = 0;
12 if (keyEvent->key() == Qt::Key_Left || keyEvent->key() == Qt::Key_Up)
13 {
14 DoingSomething1();
15 }
16 else if (keyEvent->key() == Qt::Key_Right || keyEvent->key() == Qt::Key_Down)
17 {
18 DoingSomething2();
19 }
20 }
21 return false;
3.如果是在windows系統下開發的話,可以使用鉤子實現。