如何在屏幕外窗口中渲染焦点指示符?

时间:2018-03-20 10:43:32

标签: c++ qt qml qtquick2

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

这一切都很有效,但我无法在"活跃的"中呈现用户界面。或者"专注于"样式。例如,如果我激活文本字段,则没有光标且没有蓝色轮廓,因为屏幕外窗口(QQuickWindow)不被视为活动窗口。它实际上从未在桌面上显示 - 它只存在于内存中。

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

有没有办法迫使QQuickWindow渲染就像它是前窗一样,即使情况并非如此?

1 个答案:

答案 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还可以

但是看起来不太好。

相关问题