【发布时间】:2014-09-22 18:57:44
【问题描述】:
我有一个Qt 应用程序,其中包含多个同时显示按钮的小部件。在某些情况下,我希望将按键发送到其中一个小部件,即使该小部件没有焦点。为此,我在主小部件(拥有此应用程序中的所有子小部件)中覆盖了keyPressEvent(),如果它没有焦点,则使用类似于此的代码将键事件重新发送到子小部件:
if (!someWidget->hasFocus())
{
QApplication::sendEvent(someWidget, keyEvent);
}
只要someWidgethandes 表示事件,这将非常有效。如果它忽略它,那么它会进入一个讨厌的无限递归循环,因为事件会流向父母。
有没有办法知道事件来自哪里,这样我就可以防止这种无限循环?我正在考虑这样的事情:
if (!someWidget->hasFocus() && (keyEvent->source != someWidget))
{
QApplication::sendEvent(someWidget, keyEvent);
}
或者有其他方法可以防止这种情况发生吗?
【问题讨论】:
-
QApplication::focusWidget?恕我直言,QKeyEvent的来源是用户 -> 平台 API。