在QMainFrame中这样构造MDI窗口:
auto pFrame = new QMdiArea(this);
pFrame->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
pFrame->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
pFrame->setViewMode(QMdiArea::TabbedView);
pFrame->setTabShape(QTabWidget::Triangular);
pFrame->setTabsClosable(true);
pFrame->setTabsMovable(true);
QMdiArea* mdiArea = pFrame;
AuWindow3d* pView = new AuWindow3d(mdiArea);
auto pSubWin = mdiArea->addSubWindow(pView, Qt::SubWindow);
pSubWin->setWindowTitle(tr("{3D}"));
pSubWin->showMaximized();
setCentralWidget(pFrame);
运行程序,窗口显示正常。
但在其他地方获取当前子窗口
QMdiArea* mdiArea = dynamic_cast<QMdiArea*>(centralWidget());
auto pSubWin = mdiArea->currentSubWindow();
if (!pSubWin)
return nullptr;
得到的pSubWin永远是null。
如果在添加MDI子窗口之前设置QMainWindow的centralWiget,就可以得到正确的结果。