需求:獲取方向鍵然后操作。
問題: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系統下開發的話,可以使用鈎子實現。