我目前正在尝试在远程XServer (Exceed)上执行Qt X11应用程序。为了使应用程序窗口始终位于其他显示的顶部,我使用以下语句:
MainWindow->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Tool);如果我在本地Windows7和Ubuntu操作系统上执行我的应用程序,它将作为"Always on Top“应用程序执行。但是,当我将显示信息路由到远程XServer (Exceed x64 v14)时,它开始执行时没有"Always on Top“属性。当它失去焦点时,它就会落后于其他显示器。
是否需要在Qt代码或Exceed产品中进行进一步的配置?
谢谢。
发布于 2012-06-05 18:50:25
首先,让我们去掉一些术语。您设置的"Always on Top“属性不是X11的一个功能,而是一组标准的所谓窗口管理器”提示“的一部分,作为客户端间通信手册和扩展窗口管理器提示的一部分指定。
X11不处理窗口在屏幕上的位置,这是窗口管理器所做的。在一个典型的X11系统上,你有一个符合ICCCM/EWMH的窗口管理器,它控制着所有的窗口,一切都很好。这也适用于所有类型的转发,因为对于X11服务器来说,客户端连接的方式并不重要,客户端之间的所有通信都通过X11服务器进行。
现在,您使用的是Exceed,这是一个运行在Microsoft Windows桌面之上的X11服务器。Windows的所有窗口管理都是自己完成的,像"Always-On-Top“这样的东西是Windows窗口管理代码的策略的一部分。但是,由于X11没有定义策略,而只是定义了方法,任何类型的ICCCM/EWMH信息都不会传递给窗口管理。Windows看到的所有窗口都是由Exceed为各个客户端创建的无特色的顶级窗口。
现在你可以在Exceed中启动一个Windows,但是这个WM只存在于X11中,而且由于X11没有定义像"Always- on - top“这样的策略,所以无法告诉Windows,一个窗口实际上应该保持在顶部。你也可以在“全屏”模式下启动Exceed,它会打开一个完整的窗口,在这个窗口中,所有的X11客户端都在自己的小桌面上运行。在其中运行的WM将仅管理其中的X11客户端,但同样不能将其信息传递给Windows。
您实际上需要的是某种旁路,它将并行连接到Exceed,并使Windows窗口属性(策略)与X11端的ICCCM/EWMH保持同步。这样的程序是完全可行的,但我不知道有任何程序可以做到这一点。
发布于 2012-06-01 20:05:02
X11转发不支持此功能
https://stackoverflow.com/questions/10849831
复制相似问题