MnemonicAttached::MnemonicAttached(QObject *parent) : QObject(parent) { QQuickItem *parentItem = qobject_cast<QQuickItem *>(parent); if (parentItem) { if (parentItem->window()) { m_window = parentItem->window(); m_window->installEventFilter(this); } connect(parentItem, &QQuickItem::windowChanged, this, [this](QQuickWindow *window) { if (m_window) { QWindow *renderWindow = QQuickRenderControl::renderWindowFor(m_window); if (renderWindow) { renderWindow->removeEventFilter(this); } else { m_window->removeEventFilter(this); } } m_window = window; if (m_window) { QWindow *renderWindow = QQuickRenderControl::renderWindowFor(m_window); //renderWindow means the widget is rendering somewhere else, like a QQuickWidget if (renderWindow && renderWindow != m_window) { renderWindow->installEventFilter(this); } else { m_window->installEventFilter(this); } } }); } }