我有一个Qt
应用程序与多个小工具同时显示按钮。在某些情况下,我想要将按键发送到其中一个小部件,即使该小部件没有焦点。要做到这一点,我在主部件覆盖keyPressEvent()
(即拥有这个应用程序的所有subwidgets)和关键事件重新发送到SubWidget的,如果它不使用类似于此代码具有焦点:确定QKeyEvent的来源
if (!someWidget->hasFocus())
{
QApplication::sendEvent(someWidget, keyEvent);
}
这个作品很好,只要someWidget
handes说的事件。如果它忽略它,那么它会进入一个令人讨厌的无限递归循环,因为事件流向父母。
有没有办法知道事件来自哪里,所以我可以防止这个无限循环?我在想这样的事情:
if (!someWidget->hasFocus() && (keyEvent->source != someWidget))
{
QApplication::sendEvent(someWidget, keyEvent);
}
或者是否有不同的方法可以防止这种情况发生?
'QApplication :: focusWidget'? Imho,QKeyEvent的来源是用户平台API。 – 2014-09-22 20:44:02