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

Posted

技术标签:

【中文标题】如何在屏幕外窗口中呈现焦点指示器?【英文标题】: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 像前窗一样呈现,即使不是这样?

【问题讨论】:

您找到解决方案了吗? 很遗憾没有。从那以后我切换到了虚幻引擎。 【参考方案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的焦点。

以上是关于如何在屏幕外窗口中呈现焦点指示器?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写 Applescript 来调整外接显示器上的应用程序窗口大小

Elm:如何在自己的浏览器窗口中呈现每个 elm 模块? - 同一个应用程序中的两个模块(主模块)

如何在 Swift 5 中以编程方式在特定屏幕(即主显示器而不是外部显示器)上显示窗口? [苹果系统; Xcode 15]

如何在MacBook中将外接屏幕设置为主屏幕的方法

android打开一个窗口后如何设置屏幕背景变暗且不能点击

外接显示器的窗口影响主屏幕