Qt 报错
QWidget::setLayout: Attempting to set QLayout “” on MainWindow “”, which already has a layout
编译无错误提示,但是界面不显示控件
以上两个问题的原因:
QMainWindow类实际上有一个默认的layout,这个Layout包括了菜单栏、工具栏、停驻窗口区、中心窗口区、底部状态栏五部分。所以在MainWindow并不能直接进行布局。
解决方法:
需要使用间接的方法。
- 先定义一个QWidget对象,
- 然后使用QMainWindow::setCentralWidget()函数来将该QWidget对象设置为Central Widget
-
使用该QWidget对象的setLayout()函数
注:后续对象都要被添加到该QWidget对象下的layout中。
示例程序
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QPushButton *b = new QPushButton();
QWidget *widget = new QWidget();
this->setCentralWidget(widget);
mainlayout = new QHBoxLayout();
mainlayout->setMargin(5);
mainlayout->setSpacing(5);
mainlayout->addWidget(b);
centralWidget()->setLayout(mainlayout);
}