Qt 4.8.4如何以编程方式设置QWS服务器的焦点,并处理多个客户端应用程序?

3
我理解( Qt嵌入式中的窗口管理如何工作? ),你应该运行一个应用程序作为QWS服务器来提供窗口管理设施,但是在Linux的Qt嵌入式中,你也可以运行具有图形界面的其他应用程序。
我想在程序中无需鼠标/键盘交互就能在窗口之间切换焦点。我已经查阅了以下文档,但没有看到任何让不同窗口“活跃”的方法:
http://qt-project.org/doc/qt-4.8/qwsserver.html
http://qt-project.org/doc/qt-4.8/qapplication.html
http://qt-project.org/doc/qt-4.8/qsessionmanager.html#details
http://qt-project.org/doc/qt-4.8/qwswindow.html

QWSServer有一个方法:

const QList<QWSWindow *> & QWSServer::clientWindows ()

这将返回一个QWSWindows列表,但我不知道如何将其中一个窗口设置为当前活动窗口。我该怎么做?谢谢 -

2个回答

2
接受的答案在某种程度上是错误的。我认为解决方案是通过clientWindows找到所需的窗口,然后调用QWSWindow::setActiveWindow(),再调用QWSWindow::raise()QWSWindow提供了未记录的raise()方法。请参见:QWSWindowqwindowsystem_qws.h定义。如果您想创建任何类型的窗口管理器,就需要这种功能。
在某些情况下,“未记录”的内容可能会超出“不可能”的范畴。
如果您希望让非Qt应用程序具有焦点等功能,则更加复杂和困难。

我自己从未找到过这个问题的解决方案。祝你好运 - 如果你的解决方案奏效,请在此处告诉我。 - PhilBot
在Qt嵌入式中没有这样的类。 - BЈовић
是的,有一个名为QWSWindow::raise()的方法。我更新了答案并提供了源链接。我已经使用它来完成OP所要求的操作。唯一的问题是你是否想使用未记录的功能。然而,由于QWS在Qt5中已被弃用,我不明白为什么还有人会使用它。整个QWS已经成为了一个死亡基础设施。 - artless noise

1
如果您试图使用 QWSServer::clientWindows () 来实现,那么请忘掉这个方法。 QWSWindowQWSClient 仅提供获取客户端窗口信息的接口,您无法从服务器应用程序中控制它们。
有两种方法可以实现您想要的效果:
  • 从创建窗口的应用程序中进行操作
  • 使用 QWSEmbedWidget 嵌入客户端窗口,然后您就能获得某种程度的控制权。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接