码上通QT实战09--监控页面01-区域划分

1、前言

Qt 中的布局(Layout)系统,这是 Qt 界面开发中实现控件自适应窗口大小、跨平台界面适配 的核心技术,Qt 布局系统(QLayout 及其子类)的核心目标是自动管理控件的位置和大小 ,解决原生固定坐标布局(setGeometry/move)的两大痛点:

  1. 窗口缩放时,控件不会自适应,界面错乱;
  2. 不同分辨率 / 系统(Windows/macOS/Linux)下界面布局不一致。

布局的核心逻辑:

  • 布局会根据控件的大小策略(Size Policy)最小 / 最大尺寸伸缩因子(Stretch Factor) 自动分配空间;
  • 布局本身是 "不可见容器",需挂载到 QWidget/QDialog/QMainWindow 等窗口上生效。

Qt 提供了 4 种核心布局类,覆盖绝大多数界面布局场景:

使用布局的核心步骤:

  1. 创建布局对象(如 QVBoxLayout);
  2. 向布局中添加控件 / 子布局(addWidget/addLayout);
  3. 将布局设置到窗口 / 容器控件上(setLayout)。

布局的高级技巧:

  1. 伸缩因子(Stretch Factor)

  2. 伸缩项(Stretch Item)

  3. 大小策略(Size Policy)

  4. 嵌套布局,布局可以无限嵌套(布局中添加子布局),实现复杂界面

2、如何干

1、整体划分左右板块,右边占220

2、左侧划分上下区域,下面占180

3、左上部分划分为左中右区域

4、温度部分划分上中下三个区域

5、QSS 样式表

  • QSS 是 Qt 对 CSS 的定制化实现与扩展,90% 的基础语法和 CSS 一致,学习成本低;
  • QSS 专门适配 Qt 控件体系,提供了 Qt 专属的选择器、伪状态、属性,完美贴合 Qt 开发;
  • QSS 支持 C++ QtPyQt/PySide2/PySide6,语法完全通用,只是代码中加载方式略有差异;
  • QSS 可以实现「样式与逻辑分离」,界面美化代码不用耦合业务逻辑,维护更方便

QSS 基础语法结构

cpp 复制代码
选择器 { 属性名1: 属性值1; 属性名2: 属性值2; 属性名3: 属性值3; }

语法说明

  1. 选择器 :指定「哪些 Qt 控件」会应用这个样式(比如 QPushButton 代表所有按钮,QLabel 代表所有标签);
  2. 声明块 :用 {} 包裹,内部是键值对格式的样式属性;
  3. 样式属性属性名: 属性值 为一组,每组末尾必须加 ; 分号(分号是结束符,缺一不可);
  4. 多个样式规则可以并列编写,互不影响。

QSS 最常用的选择器

  1. 控件类型选择器(最基础,全局控件)

  2. id 选择器(# 号选择器,精准控件,推荐!)

  3. 后代选择器(空格分隔,父子控件)

  4. 直接子选择器(> 号分隔,直接父子)

  5. 分组选择器(逗号分隔,批量控件)

QSS 常用样式属性速查表

QSS 优先级规则

优先级从高到低排序

  1. 局部样式 > 全局样式 :控件自身 setStyleSheet() 设置的样式,优先级最高,会覆盖全局样式;
  2. 精准选择器 > 宽泛选择器#id选择器 > 直接子选择器 > 后代选择器 > 类型选择器;比如:#btn_loginQPushButton 优先级高,QWidget > QPushButtonQPushButton 优先级高;
  3. 伪状态 > 普通状态:带伪状态的样式(如:hover)会覆盖同选择器的普通样式;
  4. 同优先级,后写的样式覆盖先写的样式:同一个选择器的样式,后面写的属性会覆盖前面的同名属性。

6、运行效果

7、小结

布局(Layout)是 Qt 界面开发的核心基石 ,所有继承自QWidget的控件都能通过布局管理位置和大小,QHBoxLayout 水平布局【使用率最高,QVBoxLayout 垂直布局【使用率最高】,QGridLayout 网格布局【功能最强,必备】,QFormLayout 表单布局【专用布局,高频】,真理:没有任何一个复杂界面是单个布局能实现的,所有复杂界面都是「基础布局的嵌套组合」

复制代码
原创不易,打字不易,截图不易,撸码不易,整理不易,走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,灌水,请动动你的金手指,祝您早日实现财务自由。
相关推荐
m0_706653236 小时前
模板编译期排序算法
开发语言·c++·算法
历程里程碑6 小时前
Linxu14 进程一
linux·c语言·开发语言·数据结构·c++·笔记·算法
不当菜虚困6 小时前
windows下HSDB导出class文件报错【java.io.IOException : 系统找不到指定的路径。】
java·开发语言
lsx2024066 小时前
Vue.js 循环语句
开发语言
m0_561359676 小时前
嵌入式C++加密库
开发语言·c++·算法
j445566116 小时前
C++中的职责链模式实战
开发语言·c++·算法
m0_686041616 小时前
实时数据流处理
开发语言·c++·算法
梵刹古音6 小时前
【C语言】 字符型变量
c语言·开发语言·嵌入式
草履虫建模6 小时前
A13 String 详解:不可变、常量池、equals 与 ==、性能与常见坑
java·开发语言·spring·jdk·intellij-idea·java基础·新手
知无不研6 小时前
内存碎片与内存优化
开发语言·c++·内存优化·内存碎片·内存操作