Qt 4.8.4 QWS Server使用多个客户端应用程序以编程方式设置焦点

我明白( 如何在qt中embedded窗口工作? )您应该运行一个应用程序作为QWS服务器来提供窗口pipe理工具,但是您也可以在Qt Embedded for Linux中运行其他带有graphics界面的应用程序。

我想以编程方式切换窗口之间的焦点,而不需要鼠标/键盘的交互来实现焦点。 我search了下面的文档,但是没有看到任何方法来创build一个不同的窗口“主动”:

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列表,但我看不到如何使其中一个窗口当前活动的窗口。 我怎样才能做到这一点? 谢谢 –

如果你正在尝试使用QWSserver::clientWindows () ,那就把它忘掉。 QWSWindowQWSClient只是提供接口来获取有关客户端窗口的信息。 您无法从服务器应用程序中控制它们。

有两种方法可以做你想做的事情:

  • 从创建窗口的应用程序中执行
  • 使用QWSEmbedWidget嵌入客户端窗口,然后你得到某种控制

接受的答案在某种意义上是错误的。 我认为解决方案是通过clientWindows找到需要的窗口,然后调用QWSWindow::setActiveWindow() ,然后调用QWSWindow::raise()

QWSWindow提供了无证的raise()方法。 请参阅: QWSWindow的qwindowsystem_qws.h定义。 如果你想做任何类型的窗口管理器,你需要这种类型的功能。

无证可以在某些情况下击败不可能。

如果您希望让非Qt应用程序专注等,则更为复杂和困难。