向QMainWindow中添加布局

​ 今天(2019-4-9),我创建了一个不带ui文件的MainWindow中添加布局时发现控制台显示MainWindow中已经自带了一个布局器,没法添加。

找到默认布局器

​ 对MainWindw类的Children()进行遍历:

for(auto x:MainWindow::children()){
    qDebug()<<x;
}

控制台输出如下:

QMainWindowLayout(0x20c1fbf0, name = "_layout")
QPlainTextEdit(0x20c161f0)
QMenuBar(0x20c25570)
QToolBar(0x269e9f30)
QStatusBar(0x269e97f0)

​ 可以看到,MainWindow的默认布局为QMainWindowLayout

设置布局

​ 直接百度,发现:[QMainWindow中直接添加LayOut是不可以的(解决方法看文章内容)]

上面给出了一个办法:

  1. 先创建一个QWidget对象,并设置其为中心部件。

  2. 对创建QWidget对象设置布局

代码如下:

QWidget* main_widget=new QWidget(this);
setCentralWidget(main_widget);

QHBoxLayout *lay=new QHBoxLayout(main_widget);

main_widget->setLayout(lay);

​ 如此,就完成了MainWindow的布局。

需要注意的是,如果将QHBoxLayout的父对象设置为this,虽然控制台会有警告,但是布局依然正确。