代码设置 Qt mainwindow.ui 的布局(Layout)

目录

1. 首先解决问题:

2. 接着解释为什么:

3. 最后强调一点:

自己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);

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值