在mainwidow中添加以下代码:
QVBoxLayout *main_layout = new QVBoxLayout(this);
QWidget* widget = new QWidget(this);
main_layout->addWidget(widget);
centralWidget()->setLayout(main_layout);
运行程序时,QtCreator应用程序输出框会打印出一段话:
QLayout: Attempting to add QLayout "" to MainWindow "MainWindow", which already
意思是正在尝试将新的布局添加到MainWindow中已有的布局中,代码按照上述来写,程序虽然也能正常运行,但是既然打印出了这句话,就说明有点问题。
我将代码改为以下这种,上面那句话就消失了:
QVBoxLayout *main_layout = new QVBoxLayout(centralWidget());
QWidget* widget = new QWidget(this);
main_layout->addWidget(widget);
centralWidget()->setLayout(main_layout);
分析:
QVBoxLayout *main_layout = new QVBoxLayout(this);
centralWidget()->setLayout(main_layout);
或者 this->setLayout(main_layout);都会出现上面的那句话。
这种写法指定main_layout 的parent是MainWindow,而MainWindow已经存在一个布局了,这个布局就是centralWidget的布局,如果想在MainWindow中正常布局,main_layout则需要指定centralWidget()为父对象:
QVBoxLayout *main_layout = new QVBoxLayout(centralWidget());
QWidget* widget = new QWidget(this);
main_layout->addWidget(widget);
centralWidget()->setLayout(main_layout);