在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,就可以得到正確的結果。