首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使QWindow::fromWinId正常工作

无法使QWindow::fromWinId正常工作
EN

Stack Overflow用户
提问于 2017-07-12 23:22:47
回答 1查看 2.1K关注 0票数 2

我的Qt5.9程序(在X11 Linux上)使用QProcess启动其他应用程序。我希望控制这些应用程序产生的窗口,因此我获得了它们的winId值,并使用QWindow::fromWinId获得了一个QWindow实例。

问题是这些实例是无效的,并且不代表它们应该显示的窗口。

如果我使用xwininfo检查winId值,将返回正确的信息,因此我知道它们是正确的。

我做错了什么?

编辑:一个例子不会有太大帮助,但下面是:

代码语言:javascript
复制
QProcess *process=new QProcess(this);
...
process.open()
... // wait until window appears
WId winId=PidToWid(process->processId()); // this function returns the    Window ID in decimal format. I test this with xwininfo, it's always correct
...
QWindow *appWindow=QWindow::fromWinId(winId);

..。基本上就是这样。appWindow是一个有效的QWindow实例,但它与实际的窗口没有任何关系。例如,如果我关闭()它,它会返回true,但窗口不会关闭。

即使我故意提供了错误的WId,最终结果也是一样的。

EN

回答 1

Stack Overflow用户

发布于 2018-05-25 19:15:50

这不是正确的解决方案,解释为什么它应该工作,但它可能对某些人有帮助…

当我使用QWindow从Qt4 QX11EmebeddedContainer切换到Qt5实现时,我的应用程序也遇到了同样的问题。我为解决/修复此问题所做的工作如下:

客户端应用程序:

代码语言:javascript
复制
widget->show(); //Widget had to be shown
widget->createWinId();
sendWinId(widget->winId()); //Post window handle to master app where is constructed container

主应用程序:

代码语言:javascript
复制
QWindow* window = QWindow::fromWinId(clientWinId);
window->show(); //This show/hide toggle did trick in combination with show in client app
window->hide();
QWidget* container = QWidget::createWindowContainer(window, parentWindowWidget);

在此之后,我能够通过QWidget容器正确地控制窗口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45061803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档