当前位置: 首页 > 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);  // 伸缩因子 1QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy2.setHorizontalStretch(2);  // 伸缩因子 2label1->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) 可进一步优化布局

 

 

http://www.lryc.cn/news/538859.html

相关文章:

  • 简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标
  • DeepSeek自动化写作软件
  • 【kafka系列】Kafka如何实现高吞吐量?
  • learn_pytorch03
  • 机器学习:k近邻
  • redis之lua实现原理
  • [Android] 【汽车OBD软件】Torque Pro (OBD 2 Car)
  • 安全问答—安全的基本架构
  • Java 运行时常量池笔记(详细版
  • mysql增加字段操作以及关键字报错
  • Wireshark 输出 数据包列表本身的值
  • 日常开发中,使用JSON.stringify来实现深拷贝的坑
  • 【探商宝】:大数据与AI赋能,助力中小企业精准拓客引
  • Javascript网页设计案例:通过PDF.js实现一款PDF阅读器,包括预览、页面旋转、页面切换、放大缩小、黑夜模式等功能
  • 各类系统Pycharm安装教程
  • 哈希表(C语言版)
  • 内容中台驱动企业数字化内容管理高效协同架构
  • LLaMA-Factory DeepSeek-R1 模型 微调基础教程
  • vue 文件下载(导出)excel的方法
  • 【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.3 RNN与LSTM在自然语言处理中的应用案例】
  • LLMs Ollama
  • Blackbox.AI:高效智能的生产力工具新选择
  • 计算机专业知识【 轻松理解数据库四大运算:笛卡尔积、选择、投影与连接】
  • C/C++字符串格式化全解析:从printf到std::format的安全演进与实战指南
  • 【C++】stack 和 queue 的适配器模式与实现
  • 【python】You-Get
  • PHP基础部分
  • gitee SSH 公钥设置教程
  • Java零基础入门笔记:(3)程序控制
  • 鸡兔同笼问题