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

Qt Widgets布局控件

Qt Widgets 的布局系统是它的核心设计之一——基本上可以理解为:Qt 强烈提倡“布局管理器(Layout Manager)”方式来做界面,而不是手写坐标


一、Qt Widgets 有哪些布局控件?

Qt 提供了一套非常成熟的布局类(都继承自 QLayout):

1️⃣ 常用布局

  • QHBoxLayout —— 水平布局(从左到右)
  • QVBoxLayout —— 垂直布局(从上到下)
  • QGridLayout —— 网格布局(类似表格)
  • QFormLayout —— 表单布局(label + editor)

👉 这是日常开发 90% 用到的


2️⃣ 其他布局

  • QStackedLayout —— 页面切换(类似 tab 的底层)
  • QLayout + 自定义布局 —— 可以自己实现

二、Qt Widgets 提倡哪种布局方式?

👉 强烈推荐:布局管理(Layout-based UI)

而不是:

❌ 绝对坐标(setGeometry / move / resize)


✔ 推荐方式(Qt官方思路)

QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(button1);
layout->addWidget(button2);

特点:

  • 自动适配窗口大小变化
  • 自动处理 DPI 缩放
  • 自动处理字体变化
  • 跨平台一致性好

❌ 不推荐方式

button->setGeometry(10, 10, 100, 30);

问题:

  • 分辨率变化就炸
  • 不可维护
  • UI 很难扩展

三、Qt 布局的核心机制(很重要)

Qt 布局系统本质是:

👉 基于 sizeHint + sizePolicy 的自动计算系统

关键点:

1️⃣ sizeHint(推荐大小)

每个控件都有:

QWidget::sizeHint()

2️⃣ QSizePolicy(伸缩策略)

例如:

QSizePolicy::Expanding
QSizePolicy::Fixed
QSizePolicy::Preferred

决定:

👉 控件在布局里“能不能被拉伸”


3️⃣ stretch(拉伸因子)

layout->addWidget(widget, stretch);

决定:

👉 剩余空间怎么分配


四、Qt Widgets vs WPF 布局思想(你一定关心这个)

你是做 WPF 的,这里给你一个对照:

概念 Qt Widgets WPF
垂直布局 QVBoxLayout StackPanel
水平布局 QHBoxLayout StackPanel
网格布局 QGridLayout Grid
自动布局
绝对布局 不推荐 Canvas(也不推荐)

👉 本质是一样的设计哲学:

声明式布局 + 自动测量 + 自动排列


五、Qt Designer vs 手写代码

Qt 有两种 UI 构建方式:

1️⃣ Qt Designer(类似 XAML)

  • 拖控件
  • 设置 layout
  • 保存为 .ui

👉 内部也是用 Layout


2️⃣ 手写代码

👉 更灵活,适合复杂动态 UI


六、实际开发建议(重点)

结合你的高频数据采集 + 可视化场景,我建议:


✅ 推荐结构

  • 外层:QVBoxLayout
  • 中间:QSplitter(可拖动)
  • 图表区域:自适应布局
  • 控制区:QFormLayout

❗关键点

  1. 一定不要用绝对坐标
  2. 图表控件要设置 Expanding
  3. 复杂界面用嵌套布局

七、一句话总结

👉 Qt Widgets 的布局哲学是:

“一切交给 Layout 管理,控件只描述自己,不关心位置”


http://www.jsqmd.com/news/607012/

相关文章:

  • day18-数据结构力扣
  • Live2D资源提取技术实战:从瓶颈突破到跨领域应用
  • OmAgent与本地模型部署:使用Ollama和LocalAI的完整教程
  • ComfyUI InstantID完整指南:掌握AI人脸控制的终极技巧
  • 瑞祥卡回收全过程解析:从新手到高手的进阶攻略 - 团团收购物卡回收
  • 雅浪卫浴靠谱吗能做浴室柜定制吗 - mypinpai
  • [TOOLS] 优化Verdi波形调试效率的关键技巧
  • Python 异步 async/await:为什么 AI 框架大量使用?| 基础篇
  • 开源项目的合规边界:从PyWxDump移除事件看技术伦理与法律风险
  • 关于各种服务器
  • 深入芋道yudao-cloud源码:OAuth2 Client Credentials模式如何用虚拟用户ID巧妙实现?
  • VoxCPM-1.5-WEBUI快速上手:3步搭建高保真文本转语音服务
  • 支付宝立减金回收指南:如何轻松兑现优惠? - 团团收购物卡回收
  • 分析2026年北京雪糕小时达服务,哪家供应商更值得选? - myqiye
  • OpenClaw调用Qwen3-14B私有镜像:低成本替代OpenAI API方案
  • 尚壹彩广告喷绘签约深圳昊客网络阿里代运营与 豆包GEO 推广:携手打造共赢未来 - 深圳昊客网络
  • AAV病毒包装优化全流程:三质粒比例、空壳率控制与GMP转染解决方案【曼博生物官方独家提供Polysciences产品】 - 上海曼博生物
  • DAMOYOLO-S模型推理效率深度优化:利用CUDA与多线程提升吞吐量
  • 总结北京雪糕厂招聘需求,这些岗位等你来 - mypinpai
  • 不规则PCB的接地—连续回流与噪声抑制核心策略
  • AWPortrait-Z使用技巧:如何用历史记录快速复现最佳效果
  • 2026希腊买房移民中介服务解析与选择参考 - 品牌排行榜
  • Sonic云真机平台核心架构解析:微服务设计原理与实现
  • KMS激活全攻略:解决Windows与Office授权难题的终极指南
  • Design.md:让 AI 一致性进行前端 UI 设计的解决方案
  • 成都雅致尚品文化传播公司:成都武侯区会展桌 会展沙发椅租赁费用多少 - LYL仔仔
  • Vue3+Vite+TypeScript+ElementPlus项目最优配置
  • Wan2.2-I2V-A14B生成作品画廊:建筑设计与室内装修方案动态展示
  • [FastMCP设计、原理与应用-01] Hello, MCP
  • VibeVoice-TTS快速上手:5步生成你的第一个多人对话音频