在我的Qt 5.3应用程序中,我想将子进程的GUI集成到我的主进程窗口中:
QWidget.WId返回的小部件QWidget::winId()传递给父进程(使用IPC).QWindow::fromWinId()和QWidget::createWindowContainer()创建QWidget显示子进程的GUI.此小部件嵌入到另一个小部件的布局中.观察:
QWidget::createWindowContainer()级使用单独的顶级窗口,那么子嵌入就好了.QMessageBox,问题自行修复,并且在父级的下一次调整大小之后正确嵌入子项.特别是最后一点让我困惑.我试图找出是否QMessageBox在子窗口小部件上运行更改一些标志,如果我可以手动模拟这些更改来解决问题,没有运气.
有谁知道这里发生了什么?模态对话框可能对修复问题的小部件做了什么?
小智 4
首先 - 谢谢你提出这个问题。在此之前我不知道Qt中有这个功能。我花了一些时间来实现你的解决方案,但遇到了同样的问题:白色边框。
经过几次测试后,我尝试动态调整窗口父级,取而代之的是白色边框,有本机操作系统边框:

看起来像当调用QWidget::createWindowContainerQt 时获取整个窗口的大小,显示QWidget(比整个窗口更小的尺寸)并用白色填充背景。
我找到了这个问题的解决方案:Qt::FramelessWindowHint在调用父窗口之前为子窗口小部件设置窗口标志createWindowContainer。
this->setWindowFlags(Qt::FramelessWindowHint);
Run Code Online (Sandbox Code Playgroud)
调整大小后我无法重现崩溃问题。我将子小部件添加到布局中并且工作正常。
您可以在 Git Hub 上查看我的示例源代码。
如果它不能解决您的崩溃问题,请提供此问题的一些来源。
注意:在 GitHub 上的示例中,我运行子项目,从调试输出中读取 winId,修改父源,然后运行父项目。
| 归档时间: |
|
| 查看次数: |
1146 次 |
| 最近记录: |