我尝试使用Qt在虚拟现实中实现自定义用户界面。
我使用QQuickRenderControl
将QML中定义的一些UI呈现为OpenGL帧缓冲区。
生成的纹理在我的自定义OpenGL场景中绘制到四边形上。使用运动控制器模拟鼠标事件。
这一切都很有效,但我无法在"活跃的"中呈现用户界面。或者"专注于"样式。例如,如果我激活文本字段,则没有光标且没有蓝色轮廓,因为屏幕外窗口(QQuickWindow)不被视为活动窗口。它实际上从未在桌面上显示 - 它只存在于内存中。
如果我强制窗口显示在桌面上并使其成为应用程序的前窗口,则活动文本字段将正确呈现,焦点轮廓和光标位于VR场景中。但是,我想避免在桌面上显示此窗口(它呈现为空的白色窗口)。
有没有办法迫使QQuickWindow渲染就像它是前窗一样,即使情况并非如此?
答案 0 :(得分:2)
m_quickWindow->setX(-m_quickWindow->width());
m_quickWindow->setY(-m_quickWindow->height());
m_quickWindow->setFlag(Qt::SplashScreen);
m_quickWindow->show();
对于Qt 5.11来说还可以
m_quickWindow->setOpacity(0.f);
m_quickWindow->setFlags(Qt::SplashScreen | Qt::WindowTransparentForInput);
m_quickWindow->show();
更好的解决方案-Qt 5.15还可以
但是看起来不太好。