Qt Key Event 的行为与键盘不同

Posted

技术标签:

【中文标题】Qt Key Event 的行为与键盘不同【英文标题】:Qt Key Event not behaving similar to keyboard 【发布时间】:2013-11-29 09:55:30 【问题描述】:

我正在尝试以编程方式发送键盘按键。这适用于 tab 键和其他键,但不适用于空格。

Tab 和 Space 的代码如下所示:

QKeyEvent *event = new QKeyEvent(QKeyEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
QCoreApplication::postEvent(this->viewer, event);

QKeyEvent *event = new QKeyEvent(QKeyEvent::KeyPress, Qt::Key_Space, Qt::NoModifier);
QCoreApplication::postEvent(this->viewer, event);

当我以编程方式按下选项卡时,它会在按钮之间切换,但当我以编程方式按下空格键时,它不会按下按钮(按下时它会变灰,但屏幕不会按应有的方式改变)。当我按下键盘上的空格键时,按钮被按下并且屏幕发生变化。

知道为什么行为不一样吗?

【问题讨论】:

【参考方案1】:

这里的解决方案是在发送 KeyPress 事件后发送 KeyRelease 事件。如图所示:

QKeyEvent *event = new QKeyEvent(QKeyEvent::KeyPress, Qt::Key_Space, Qt::NoModifier);
QCoreApplication::postEvent(this->viewer, event);
QKeyEvent *event = new QKeyEvent(QKeyEvent::KeyRelease, Qt::Key_Space, Qt::NoModifier);
QCoreApplication::postEvent(this->viewer, event);

【讨论】:

以上是关于Qt Key Event 的行为与键盘不同的主要内容,如果未能解决你的问题,请参考以下文章

UITextView 委托行为与自定义 iOS 键盘 (SwiftKey) 不同

Qt键盘事件--组合键响应方法

qt 中怎么实现对键盘按键按下的响应

为啥提供 key=index 会导致与不定义键不同的行为? [关闭]

阻止事件冒泡和默认行为,禁止键盘事件

不同的运行时行为取决于程序的启动方式(终端与 Qt Creator)