需求:获取方向键然后操作。
问题: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系统下开发的话,可以使用钩子实现。