【发布时间】:2015-05-14 02:16:29
【问题描述】:
在我的 Qt 5.3 应用程序中,我想将子进程的 GUI 集成到我的主进程窗口中:
- 子进程创建一个顶级
QWidget。 - 子进程将小部件的
WId从QWidget::winId()返回到父进程(使用IPC)。 - 父进程使用
QWindow::fromWinId()和QWidget::createWindowContainer()创建一个QWidget显示子进程的GUI。此小部件嵌入到另一个小部件的布局中。
观察:
- 子 GUI 显示但未正确呈现:在重新调整父图形大小时,存在未正确更新的白色边框。
- 如果父窗口的大小调整得太小,子进程会由于 Qt 代码中的内存访问冲突而崩溃。
- 如果我不使用
QWidget::createWindowContainer()指定父级以使用单独的顶级窗口,则子级嵌入就好了。 - 在孩子打开一个模态对话框后,例如
QMessageBox,问题会自行解决,并且在下一次调整父级大小后,孩子会正确嵌入。
尤其是最后一点让我很困惑。我试图找出运行 QMessageBox 是否会更改子小部件上的一些标志,以及是否可以手动模拟这些更改以解决该问题,但没有运气。
有人知道这里发生了什么吗?模态对话框可能对修复问题的小部件做什么?
【问题讨论】: