У меня есть приложение Qt
с несколькими виджетами, показывающими кнопки одновременно. В определенных обстоятельствах я хочу, чтобы нажатия клавиш отправлялись на один из виджетов, даже если этот виджет не имеет фокуса. Для этого я переопределил keyPressEvent()
в главном виджете (который владеет всеми подвиджетами в этом приложении) и повторно отправил ключевое событие в подвиджет, если он не имеет фокуса, используя код, подобный этому:
if (!someWidget->hasFocus())
{
QApplication::sendEvent(someWidget, keyEvent);
}
Это прекрасно работает, пока someWidget
передает указанное событие. Если он игнорирует его, то входит в неприятный бесконечный рекурсивный цикл, поскольку события переходят к родителям.
Есть ли способ узнать, откуда произошло событие, чтобы я мог предотвратить этот бесконечный цикл? Я думаю о чем-то вроде этого:
if (!someWidget->hasFocus() && (keyEvent->source != someWidget))
{
QApplication::sendEvent(someWidget, keyEvent);
}
Или есть другой способ предотвратить это?
QApplication::focusWidget
? Имхо, источникомQKeyEvent
является пользователь -> API платформы. - person Dmitry Sazonov   schedule 23.09.2014