【发布时间】:2014-11-05 02:21:57
【问题描述】:
我正在通过重载void keyPressEvent ( QKeyEvent* eventPtr ) 方法来处理小部件中的按键事件。
问题是,当我启动我的应用程序的两个实例(来自 Qt Creator)时,只有一个实例有效地处理了按键事件。即使我将焦点放在第二个窗口上,它也不会收到事件。当我将焦点放在第一个上时,它实际上确实收到了事件。
当启动两个应用程序时,所有其他功能都可以正常工作。
这是预期行为还是已知问题,或者我可能遗漏了什么?
UPD:我发现两个窗口实际上都收到了一些按键(例如字母)。但只有一个窗口接收箭头键按下。当我创建我的小部件实例时,我在其上调用 widget->setFocus()。这使小部件接收箭头键按下。但这在启动应用程序的两个实例时不起作用。
也许我应该改用事件过滤器?
【问题讨论】:
-
怎么知道第二个应用没有收到事件?
-
@vahancho
keyPressEvent中的代码仅在应用程序的一个实例中执行。 -
@vahancho 我也可以在调试器中看到,由于没有到达断点,所以控件没有重新确认
keyPressEvent。 -
我怀疑您是否可以使用 QtCreator 同时调试两个实例。如何同时启动两个实例?为什么?
-
@vahancho 我不会同时调试两个实例。我启动了一个调试会话和一个常规会话。只有普通人收到了这些事件。好吧,让我们忘记调试。当我刚刚从 Qt Creator 启动(非调试)应用程序的两个实例时,很明显只有其中一个接收到按键事件,因为在事件处理程序中以编程方式执行的视觉效果仅发生在一个窗口中。此外,事件处理程序中的
qDebug()仅将某些内容打印到第一个窗口的控制台。
标签: qt qt-creator keypress onkeypress