作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的 Qt 5.9 程序(在 X11 Linux 上)使用 QProcess
启动其他应用程序。我想控制这些应用程序产生的窗口,所以我获取了它们的 winId
值并使用 QWindow::fromWinId
获取 QWindow
实例.
问题是这些实例无效并且不代表它们应该代表的窗口。
如果我使用 xwininfo
检查 winId
值,则会返回正确的信息,所以我知道它们是好的。
我做错了什么?
编辑:一个例子不会有太大帮助,但这里是:
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 实例,但它与实际窗口没有任何关系。例如,如果我 close() 它,它会返回 true 但窗口不会关闭。
即使我故意提供错误的WId,最终结果也是一样。
最佳答案
这不是正确的解决方案,并解释了为什么它应该有效,但是它可能对某些人有帮助...
当我使用 QWindow 从 Qt4 QX11EmebeddedContainer 切换到 Qt5 实现时,我的应用程序遇到了同样的问题。我为解决/解决此问题所做的工作如下:
客户端应用:
widget->show(); //Widget had to be shown
widget->createWinId();
sendWinId(widget->winId()); //Post window handle to master app where is constructed container
主应用程序:
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 容器正确地控制窗口。
关于linux - 无法使 QWindow::fromWinId 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45061803/
我的 Qt 5.9 程序(在 X11 Linux 上)使用 QProcess 启动其他应用程序。我想控制这些应用程序产生的窗口,所以我获取了它们的 winId 值并使用 QWindow::fromWi
我是一名优秀的程序员,十分优秀!