当前位置: 首页 > news >正文

qt的QSizePolicy的使用

使用 QSizePolicy 设置控件的伸缩因子

在 Qt 中,QSizePolicy 控制 控件如何在布局中伸缩。如果想要影响控件的大小调整行为,可以通过 QSizePolicy::setHorizontalStretch()QSizePolicy::setVerticalStretch() 设置伸缩因子

基本用法

假设我们有一个 QWidget 或者 QLabel 需要在 QHBoxLayoutQVBoxLayout 里调整大小: 

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();
  • label1label2QHBoxLayout 中会根据 HorizontalStretch 分配额外空间。

  • label11 份,label22 份,因此 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) 可进一步优化布局

 

 

相关文章:

  • 游戏引擎学习第99天
  • 【STM32】H743的以太网MAC控制器的一个特殊功能
  • DeepSeek在FPGA/IC开发中的创新应用与未来潜力
  • Java IO流详解
  • Web3 开发者周刊 36 | 构建自主未来:Agent、可扩展性与赏金
  • Android ndk兼容 64bit so报错
  • 【Elasticsearch】simple_query_string
  • AI 工具相关的临床研究或是不久将来主要的临床研究内容之一
  • Git 建立远端仓库并push
  • MacOS使用PhpWebStudy搭建PHP开发环境
  • The Simulation技术浅析(六):机器学习
  • LabVIEW袜品压力测试系统
  • IP 路由基础 | 路由条目生成 / 路由表内信息获取
  • 自制游戏——斗罗大陆
  • HtmlRAG:RAG系统中,HTML比纯文本效果更好
  • 用于处理元素的全屏显示和退出全屏操作--useFullScreen
  • 在Vue中,JavaScript数组常用方法,添加,插入,查找,删除等整理
  • 【线性代数】1行列式
  • SpringBoot初始化8个常用方法
  • 浅聊如何通过redis去做一个排行榜
  • 上报集团社长李芸:发挥媒体优势,让中非民心在数字时代更深层互联互通
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 招行:拟出资150亿元全资发起设立金融资产投资公司
  • Meta正为AI眼镜开发人脸识别功能
  • 特朗普政府拟终止太空污染研究,马斯克旗下太空公司将受益