在QDialog的派生類中,添加Layout,可在創建Layout對象的同時指定其父窗口,但這在QMainWindow中行不通,可能會出現" ..已經設置過佈局.. "或者設置的Layout不能正常顯示。這是因爲基於主窗口的程序,默認已經有了自己的佈局管理器,所以再次設置Layout的話會失效。
QMainWindow的中心控件是一個QWidget,可以通過setCentralWidget進行設置。若想在QMainWindow中添加 layout,需要通過將該Layout添加到一個QWidget對象中,然後將該佈局設置爲該空間的佈局,最後設置該控件爲QMainWindow的中心控件,步驟如下:
①創建一個QWidget實例,並將這個實例設置爲centralWidget:
QWidget*widget=newQWidget();
this->setCentralWidget(widget);
②創建一個主佈局mainLayout,添加自己需要的控件,設置佈局屬性:
QHBoxLayout*mainLayout=newQHBoxLayout;
mainLayout->setMargin(5);
mainLayout->setSpacing(5);
mainLayout->addWidget(list);
mainLayout->addWidget(stack,0,Qt::AlignRight);
mainLayout->setStretchFactor(list,1);
mainLayout->setStretchFactor(stack,3);
③將widget的佈局設置爲mainLayout:
centralWidget()->setLayout(mainLayout);