跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > Qt之格栅布局(QGridLayout)控件填满整个单元格

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

时间:2024-03-26 15:01:04 来源:网络cs 作者:付梓 栏目:卖家故事 阅读:

标签: 整个  单元  布局 
阅读本书更多章节>>>>

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的官方文档之外,还需要大胆的发散性思维,假设求证。只有这样才能提高我们的编码水平。

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-03-26/148970.html,文章来源:网络cs,作者:付梓,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论