一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

需求:获取方向键然后操作。

问题: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系统下开发的话,可以使用钩子实现。

posted on   一杯清酒邀明月  阅读(3344)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示