情况:作为我的应用程序的中心小部件,我有一个处于选项卡模式的QMdiArea (包装在从QMdiArea继承的自定义类中)。当我现在通过一切添加第一个QMdiSubWindowaddSubWindow()
时,一切都很好,这意味着窗口及其内容被最大化以占用QMdiArea的所有空间。但是,一旦我添加了第二个子窗口,就会出现以下问题:
问题:第二个窗口的内容没有显示,而是第一个窗口的内容继续显示(尽管第二个选项卡在视觉上具有焦点),但尺寸减小了。它只占用几个像素。但是,如果我现在切换回第一个子窗口/选项卡(通过单击缩小尺寸的小部件,然后自动返回到最大尺寸或通过选择第一个选项卡标题),然后再次选择第二个,一切都很好 =第二个选项卡的小部件/编辑器现在显示并最大化。
但直到我关闭第二个选项卡,在这种情况下,第一个选项卡的内容才会显示(如预期的那样),但同样只能以小尺寸显示!
截屏:
另一个相关的测试用例:创建第一个选项卡并按预期显示全尺寸。如果我现在简单地调整整个QMainWindow的大小,我的选项卡中的小部件周围会突然出现一个模糊的边框。因此,它似乎处于最大化模式和带边框的正常模式之间的混合状态。这会产生任何新的潜在客户吗?
截屏:
到目前为止,我没有使用任何明确定义的布局,但鉴于第一个选项卡工作正常,并且在手动来回切换所有其他选项卡之后,我认为它应该可以不使用。
我需要设置显式布局对象吗?为什么它适用于第一个选项卡,而不适用于第二个?
一些代码作为基础:这是在我的自定义QMdiArea类中执行的逻辑,负责添加新的孩子:
// Note: pEditor inherits from / is a QMdiSubWindow itself
if(!pEditor->isInitialized())
{
pEditor->initialize();
pEditor->setWidget(pEditor->getEditorWidget());
pEditor->setInitialized(true);
}
pEditor->beforeDisplay();
addSubWindow(pEditor);
pEditor->showMaximized();
// HACK START
pExisting = subWindowList().at(0);
if(pExisting)
setActiveSubWindow(pExisting);
// HACK END
更新:添加了N1ghtLight 提出的 hack。在编码中如此标记。
更新 2:编辑/更正问题描述 + 带有屏幕截图的新测试用例。