我有一个Qt
应用程序,其中包含多个同时显示按钮的小部件。在某些情况下,我希望将按键发送到其中一个小部件,即使该小部件没有焦点。为此,我keyPressEvent()
在主小部件(拥有此应用程序中的所有子小部件)中进行了覆盖,如果它没有焦点,则使用与此类似的代码将键事件重新发送到子小部件:
if (!someWidget->hasFocus())
{
QApplication::sendEvent(someWidget, keyEvent);
}
只要someWidget
处理所说的事件,这很有效。如果它忽略它,那么它会进入一个讨厌的无限递归循环,因为事件会流向父母。
有没有办法知道事件来自哪里,这样我就可以防止这个无限循环?我在想这样的事情:
if (!someWidget->hasFocus() && (keyEvent->source != someWidget))
{
QApplication::sendEvent(someWidget, keyEvent);
}
还是有其他方法可以防止这种情况发生?