我有Qt GUI应用程序。主窗口包含使用窗口容器放置在其上的QtQuick组件:
QQuickView * view = new QQuickView ();
QWidget * container = QWidget::createWindowContainer (view, this);
我想在整个窗口下处理所有关键的新闻事件。但是我面临的问题是,当QtQuick组件获取焦点时,我无法处理关键事件,即使我已将窗口设置为父窗口。
documentation说这种行为是预期的:
QWidget * QWidget :: createWindowContainer(QWindow *窗口,QWidget * parent => Q_NULLPTR,Qt :: WindowFlags flags = Qt :: WindowFlags())
...
窗口容器具有许多已知的限制:
...
焦点处理;可以让窗口容器实例具有任何焦点策略,并且它将通过调用QWindow :: requestActivate()将焦点委托给窗口。但是,从QWindow实例返回到正常焦点链将取决于QWindow实例本身。例如,当进入具有标签焦点的基于Qt Quick的窗口时,很可能进一步的标签按下仅在QML应用程序内循环。此外,QWindow :: requestActivate()是否实际给出窗口焦点,取决于平台。
我的问题是:即使QtQuick组件获得了焦点,有没有办法在整个窗口下处理按键事件?
GitLab提供的最小完整示例。
答案 0 :(得分:0)
一种可能(但丑陋)的解决方案是:
GitLab可用的示例。