https://stackoverflow.com/a/13661255/462608
QMainWindow有自己的布局,你无法直接设置。 您可能应该在中央窗口小部件上设置布局,或者如果您不想要它的布局/功能,可能根本不使用QMainWindow。
我有自己的一组按钮和其他我想在网格中排列的东西 我是否应该将我的小部件添加到QMainWindow的默认布局?
如果我不想使用QMainWindow的布局,我应该使用什么而不是QMainWindow? QMainWindow应该在哪里?
答案 0 :(得分:2)
来自docs:
QMainWindow有自己的布局,您可以在其中添加QToolBars,QDockWidgets,QMenuBar和QStatusBar。布局的中心区域可以被任何类型的小部件占用。您可以在下面看到布局的图像。
因此,如果您对QToolBar
,QDockWidget
,QMenuBar
或QStatusBar
感兴趣,则应使用QMainWindow
。否则,您可以使用普通QWidget
。
不,您无法访问QMainWindow
的布局。您应该在布局中包含QWidget
包含所有小部件(例如按钮),然后将该小部件用作QMainWindow
的中央小部件,例如:
#include <QtWidgets>
int main(int argc, char* argv[]){
QApplication a(argc, argv);
QMainWindow mainWindow;
QWidget centralWidget; //this is the widget where you put your buttons
QGridLayout centralLayout(¢ralWidget); //sets layout for the widget
//add buttons
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
centralLayout
.addWidget(new QPushButton(
QStringLiteral("(%0, %1)")
.arg(i).arg(j)),
i, j);
//use your widget inside the main window
mainWindow.setCentralWidget(¢ralWidget);
//main window can have a toolbar too
QToolBar* myToolBar = mainWindow.addToolBar("myToolBar");
myToolBar->addAction("myToolBar action");
//show mainwindow
mainWindow.show();
return a.exec();
}