我通过重载void keyPressEvent ( QKeyEvent* eventPtr )
方法来处理窗口小部件中的按键事件。
问题在于,当我启动应用程序的两个实例(来自Qt Creator)时,只有其中一个实际处理按键事件。即使我将焦点设置在第二个窗口上,它也不会收到事件。当我把焦点放在第一个时,它实际上确实收到了事件。
启动两个应用程序时,所有其他功能都可以正常工作。
这是预期的行为还是已知的问题,或者我错过了什么?
UPD:我发现两个窗口实际上都收到了一些按键(例如字母)。但只有一个窗口接收箭头按键。当我创建我的小部件的实例时,我在其上调用widget->setFocus()
。这使得小部件接收箭头键按下。但是,当启动两个应用程序实例时,这不起作用。
也许我应该使用事件过滤器?
答案 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消息。