目录
自己new的 Layout 怎么设置为mainwindow的布局?
1. 首先解决问题:
给ui整体布局添加内容布局时调用addLayout时出现问题
//gridLayout_ui 是自己new的布局
//ui->formLayout_forceChecks 是在 mainwindow.ui 中手动添加的布局
gridLayout_ui->addLayout(ui->formLayout_forceChecks,0,1);
Qt运行界面报错如下:
QLayout::addChildLayout: layout QFormLayout "formLayout_forceChecks" already has a parent
解决方案:
新建一个QWidget对象,将QWidget的布局设置为要添加的内容布局,然后ui整体布局调用addWidget函数将QWidget添加到ui整体布局中。
//新建QWidget对象
QWidget * widget_forceChecks = new QWidget;
//将要添加的内容布局设置为 QWidget 对象的布局
widget_forceChecks->setLayout(ui->formLayout_forceChecks);
//将QWidget对象添加到 ui整体布局中
gridLayout_ui->addWidget(widget_forceChecks,0,1);
2. 接着解释为什么:
上面报错的意思是手动添加的布局 formLayout_forceChecks ,已有父布局,这说明 addLayout 是给当前布局设置子布局。
因此 addLayout 函数不是用来给大布局添加新的内容布局的,不能直接调用 addLayout 将布局加入整体布局中。
因此我们改变方式,使用 QWidget 嵌套内容布局,再将 QWidget 插入整体布局中。
以下是 addLayout 函数的官方文档
以下是 addWidget 的官方文档
3. 最后强调一点:
自己new的 Layout 怎么设置为mainwindow的布局?
mainwindow.ui 的界面部件是 ui->centralwidget,只需要将ui->centralwidget的布局设置为你新建的布局即可。
从这一点来看,Qt本身也是使用QWidget嵌套Layout进行工作的
//ui->centralwidget 是 mainwindow.ui 的中心部件
//gridLayout_ui 是我自己 new 的网格布局
ui->centralwidget->setLayout(gridLayout_ui);