Qt之格栅布局(QGridLayout)控件填满整个单元格

Qt专栏:http://t.csdnimg.cn/GQN1M

目录

1.现象1

2.解决方案

3.现象2

4.解决方案

5.总结


1.现象1

        今天在用QGridLayout布局的时候,添加到布局的QWidget有文本框、标签、组合框和按钮等等,布局两列,通过下面的方式添加进去的:

QGridLayout* pGridLayout = new QGridLayout(this);
QLabel* pLabel1 = new QLabel("1111111", this);
pGridLayout->addWidget(pLabel1, 0, 0, Qt::AlignLeft);
QLineEdit* pEdit1 = new QLineEdit(this);
pGridLayout->addWidget(pEdit, 0, 1, Qt::AlignLeft);

发现在窗口拉伸的时候,pEdit 不会填满第0行1列的位置,右边有空隙。

2.解决方案

        最初还以为是pGridLayout 的margin所致,发现setContentsMargins也没有用;于是仔细查看Qt的官方文档:

08328696d974431084a2072da1216ced.png

 翻译一下就是:

        将给定的小部件添加到行、列的单元格网格中。默认情况下,左上角的位置为(0,0)。对齐方式由参数alignment指定。默认对齐方式为0,这意味着小部件将填充整个单元格。

        恍然大悟,不能设置QGridLayout的对齐方式,就是addWiget的最后一个参数不能填写,于是改为:

pGridLayout->addWidget(pEdit, 0, 1);

 拖动窗口改变大小,pEdit可以填满整个窗口了。

3.现象2

  同样在上面的基础上,又增加一个QComboBox,代码如下图所示:

QLabel* pLabel2 = new QLabel("2222222", this);
pGridLayout->addWidget(pLabel2, 1, 0, Qt::AlignLeft);
QComboBox* pComboBox = new QComboBox(this);
pGridLayout->addWidget(pComboBox, 1, 1);

 发现在窗口拉伸的时候,pComboBox 不会填满第1行1列的位置,左边有空隙。

4.解决方案

联想到是不是pComboBox本身自己没有填满窗口,于是查看资料,找到QWidget设置改变窗口大小函数setSizePolicy,函数定义为:

void QWidget::setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)

QSizePolicy的介绍为:

2f225829e0514081a7db8c9a772e1678.png

解释为:

QSizePolicy::Policy。策略。描述了构造QSizePolicy时使用的各种尺寸调整类型。

Fixed:size固定为QWidget::sizeHint()。
Minimum:size不能小于 sizeHint() 提供的大小。
Maximum:size不能大于 sizeHint() 提供的大小。
Preferred:最佳size为 sizeHint()。
Expanding:sizeHint()为推荐的size,但尽可能地获得更大的空间。
MinimumExpanding:sizeHint()是最小的size,但尽可能地获得更大的空间。
Ignored:sizeHint()被忽略。小部件将获得尽可能多的空间。

于是代码修改为:

QLabel* pLabel2 = new QLabel("2222222", this);
pGridLayout->addWidget(pLabel2, 1, 0, Qt::AlignLeft);
QComboBox* pComboBox = new QComboBox(this);
pComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
pGridLayout->addWidget(pComboBox, 1, 1);

拖动窗口改变大小,pComboBox可以填满整个窗口了。

5.总结

        使用QGridLayout可以轻松创建灵活的网格布局,适用于多种类型的界面。它提供了方便和强大的方式来管理和调整子部件的位置和大小,并且支持灵活的行和列布局控制。遇到问题,除了仔细阅读QT的官方文档之外,还需要大胆的发散性思维,假设求证。只有这样才能提高我们的编码水平。

  • 40
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值