【问题标题】:How to render focus indicators in an offscreen window?如何在屏幕外窗口中呈现焦点指示器?
【发布时间】:2018-03-20 10:43:32
【问题描述】:

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

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

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

有没有办法强制 QQuickWindow 像前窗一样呈现,即使不是这样?

【问题讨论】:

  • 您找到解决方案了吗?
  • 很遗憾没有。从那以后我切换到了虚幻引擎。

标签: c++ qt qml qtquick2


【解决方案1】:
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

但看起来不太好。

【讨论】:

  • 如果你想将事件从测试窗口发送到m_quickWindow,那么不要忘记在测试窗口设置标志Qt::WindowDoesNotAcceptFocus以避免失去m_quickWindow的焦点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 2011-06-08
  • 2011-08-20
  • 2012-09-10
  • 1970-01-01
相关资源
最近更新 更多