如何在屏幕外窗口中呈现焦点指示器?

Jaw*_*wap 6 c++ qt qml qtquick2

我正在尝试使用 Qt 在虚拟现实中实现自定义用户界面。我正在使用QQuickRenderControl将 QML 中定义的一些 UI 渲染到 OpenGL 帧缓冲区中。
生成的纹理被绘制到我的自定义 OpenGL 场景中的四边形上。使用运动控制器模拟鼠标事件。

这一切都很好,但我无法以“主动”或“聚焦”风格呈现 UI。例如,如果我激活一个文本字段,则没有光标和蓝色轮廓,因为屏幕外窗口(QQuickWindow)不被视为活动窗口。它从未真正显示在桌面上——它只存在于内存中。

如果我强制将窗口显示在桌面上并使其成为应用程序的前窗口,则活动文本字段将使用 VR 场景中的焦点轮廓和光标正确呈现。但是,我想避免在桌面上显示这个窗口(它呈现为一个空的白色窗口)。

有没有办法强制 QQuickWindow 像前窗一样呈现,即使情况并非如此?

小智 2

m_quickWindow->setX(-m_quickWindow->width());
m_quickWindow->setY(-m_quickWindow->height());
m_quickWindow->setFlag(Qt::SplashScreen);
m_quickWindow->show();
Run Code Online (Sandbox Code Playgroud)

Qt 5.11 没问题

m_quickWindow->setOpacity(0.f);
m_quickWindow->setFlags(Qt::SplashScreen | Qt::WindowTransparentForInput);
m_quickWindow->show();
Run Code Online (Sandbox Code Playgroud)

更好的解决方案 - 适用于 Qt 5.15

但看起来不太好。