qt的QSizePolicy的使用
使用
QSizePolicy设置控件的伸缩因子在 Qt 中,
QSizePolicy控制 控件如何在布局中伸缩。如果想要影响控件的大小调整行为,可以通过QSizePolicy::setHorizontalStretch()和QSizePolicy::setVerticalStretch()设置伸缩因子。
基本用法
假设我们有一个
QWidget或者QLabel需要在QHBoxLayout或QVBoxLayout里调整大小:
QLabel *label = new QLabel("Label");
// 创建 QSizePolicy 对象
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
// 设置水平和垂直的伸缩因子
sizePolicy.setHorizontalStretch(2); // 水平方向伸缩因子
sizePolicy.setVerticalStretch(1); // 垂直方向伸缩因子
// 应用到控件
label->setSizePolicy(sizePolicy);
这样
label在水平上会比垂直方向更容易扩展,并且QSizePolicy::Expanding允许它占据多余的空间。
伸缩因子示例
假设在一个
QHBoxLayout里,有两个QLabel控件:
QLabel *label1 = new QLabel("Label 1");
QLabel *label2 = new QLabel("Label 2");
QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy1.setHorizontalStretch(1); // 伸缩因子 1
QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy2.setHorizontalStretch(2); // 伸缩因子 2
label1->setSizePolicy(sizePolicy1);
label2->setSizePolicy(sizePolicy2);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(label1);
layout->addWidget(label2);
QWidget *window = new QWidget;
window->setLayout(layout);
window->show();
label1和label2在QHBoxLayout中会根据HorizontalStretch分配额外空间。
label1占1份,label2占2份,因此label2会比label1宽两倍。
结合
addStretch()进一步控制布局可以使用
layout->addStretch()让控件之间有不同的占比:
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(label1);
layout->addStretch(1); // 添加伸缩空隙
layout->addWidget(label2);
layout->addStretch(2); // 添加更大的空隙
addStretch(n)让布局中的空白区域也有伸缩因子,配合控件的QSizePolicy可以更精准地调整布局。
总结
QSizePolicy::setHorizontalStretch(int)控制水平方向伸缩因子。QSizePolicy::setVerticalStretch(int)控制垂直方向伸缩因子。- 越大的数值,控件就越容易扩展,占据更多空间。
- 配合
QBoxLayout::addStretch(n)可进一步优化布局。
