按下的按键事件仅由应用程序的一个实例处理

时间:2014-09-11 08:06:39

标签: qt qt-creator keypress onkeypress

我通过重载void keyPressEvent ( QKeyEvent* eventPtr )方法来处理窗口小部件中的按键事件。

问题在于,当我启动应用程序的两个实例(来自Qt Creator)时,只有其中一个实际处理按键事件。即使我将焦点设置在第二个窗口上,它也不会收到事件。当我把焦点放在第一个时,它实际上确实收到了事件。

启动两个应用程序时,所有其他功能都可以正常工作。

这是预期的行为还是已知的问题,或者我错过了什么?

UPD:我发现两个窗口实际上都收到了一些按键(例如字母)。但只有一个窗口接收箭头按键。当我创建我的小部件的实例时,我在其上调用widget->setFocus()。这使得小部件接收箭头键按下。但是,当启动两个应用程序实例时,这不起作用。

也许我应该使用事件过滤器?

2 个答案:

答案 0 :(得分:1)

由于您没有提供任何代码,我不能100%确定这是您的问题的原因,但如果您启动两个QtCreator的实例,qDebug()将在QtCreator的第二个实例中不生成任何输出 如果你使用它(或者cout / printf),那么尝试在应用程序中看到的keyPressEvent处理程序中执行某些操作,例如更改背景颜色或显示消息框

除非你安装了一个全局密钥钩子,并且你的keyPressEvent处理程序吃掉了所有关键事件,否则一个应用程序就不会吃掉具有焦点的应用程序的事件。

答案 1 :(得分:1)

从Qt Creator运行程序时,您可以在Qt Creator"应用程序输出"中看到来自qDebug的消息。窗口。但是,如果以这种方式运行多个程序,同时只会附加一个程序以在那里输出其消息。

您可以使用cmd.exe(Windows)或Terminal.app(OSX)从Qt Creator运行一个,从命令行运行第二个。这样,第二个程序将在命令或终端程序窗口中输出其qDebug消息。

相关问题