1. 程式人生 > 實用技巧 >Qt 獲取鍵盤按鍵(keyEvent獲取不到方向鍵及空格鍵)

Qt 獲取鍵盤按鍵(keyEvent獲取不到方向鍵及空格鍵)

需求:獲取方向鍵然後操作。

問題: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系統下開發的話,可以使用鉤子實現。