在我的Qt 5.3应用程序中,我想将子进程中的GUI集成到我的主进程中。窗口:
QWidget
。WId
返回的小部件QWidget::winId()
传递给父级(使用IPC)。QWindow::fromWinId()
和QWidget::createWindowContainer()
创建显示子流程的QWidget
&#39}。 GUI。此小部件嵌入到另一个小部件的布局中。观察:
QWidget::createWindowContainer()
使用单独的顶级窗口,那么孩子就可以很好地嵌入。QMessageBox
)后,问题会自行修复,并且在下次调整父级的大小后正确嵌入子项。特别是最后一点让我感到困惑。我试图找出运行QMessageBox
是否更改了子窗口小部件上的一些标志,以及我是否可以手动模拟这些更改以解决问题,但没有运气。
有谁知道这里发生了什么?模态对话框可能对修复问题的小部件做了什么?
答案 0 :(得分:3)
首先关闭 - 谢谢你提出这个问题。在此之前,我不知道Qt中的这个功能。我花了一些时间来实现您的解决方案并遇到同样的问题:白色边框。
经过几次测试后,我尝试在运行中进行窗口重新渲染,而白色边框则是本机操作系统边界:
看起来当调用QWidget::createWindowContainer
Qt获得整个窗口的大小时,显示QWidget
(尺寸小于整个窗口)并用白色填充背景。
我找到了解决此问题的方法:在父窗口中调用Qt::FramelessWindowHint
之前为子窗口小部件设置createWindowContainer
窗口标志。
this->setWindowFlags(Qt::FramelessWindowHint);
调整大小后我无法重现崩溃的问题。我将子窗口小部件添加到布局中,它工作正常。
您可以查看我的example source at Git Hub。
如果它无法解决您的崩溃问题,请提供此问题的一些来源。
注意:在GitHub的示例中,我运行子项目,从调试输出中读取winId,修改父源,然后运行父项目。