在我的Qt 5.3应用程序中,我想将子进程的GUI集成到主进程的窗口中:
QWidget
。 WId
返回的窗口小部件的QWidget::winId()
传递给父进程(使用IPC)。 QWindow::fromWinId()
和QWidget::createWindowContainer()
创建一个显示子进程GUI的QWidget
。该窗口小部件嵌入到另一个窗口小部件的布局中。 观察结果:
QWidget::createWindowContainer()
指定父级,而是使用单独的顶层窗口,则可以很好地嵌入子级。 QMessageBox
)后,问题已修复,并且在父级的下一次调整大小后正确嵌入了子级。 特别是最后一点使我感到困惑。我试图找出运行
QMessageBox
是否会更改子窗口小部件上的某些标志,以及是否可以手动模拟这些更改以解决此问题,而不会遇到麻烦。有人知道这里发生了什么吗?模态对话框可能对解决该问题的小部件有什么作用?
最佳答案
首先-谢谢您提出这个问题。在此之前,我对Qt中的此功能一无所知。我花了一些时间来实现您的解决方案,并且遇到了同样的问题:白色边框。
经过几次测试后,我尝试立即进行窗口重排,而使用白色边框代替了原来的OS边框:
看起来当调用QWidget::createWindowContainer
Qt获取整个窗口的大小时,显示QWidget
(具有比整个窗口小的大小)并用白色填充背景。
我找到了解决此问题的方法:在父窗口中调用Qt::FramelessWindowHint
之前,先为子窗口小部件设置createWindowContainer
窗口标志。
this->setWindowFlags(Qt::FramelessWindowHint);
调整大小后,我无法重现崩溃的问题。我将子小部件添加到布局中,并且效果很好。
你可以看看我的example source at Git Hub。
如果它不能解决您的崩溃问题,请提供此问题的一些来源。
注意:在GitHub上的示例中,我运行子项目,从调试输出中读取winId,修改父源,然后运行父项目。
关于c++ - 绘图错误和QWidget::createWindowContainer崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30162091/