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

QT6(常用界面组件的使用和布局管理)

QT


常用界面组件的使用

QWidget是所有界面组件的直接或间接父类

widget组件:所有界面组件的统称,它从操作系统接收鼠标,键盘和其他事件,并在屏幕上显示自己,每个组件都是矩形的,并且按z轴顺序排列

windows:没有嵌入到父组件中的组件,通常,它有一个frame和一个标题栏,可以使用window frame创建没有这两个装饰的窗口。在Qt中,QMainWindow和QDialog的各种子类是最常见的windows类型

按钮类型组件

在这里插入图片描述

继承关系结构图

QObject
QWidget
«abstract»
QAbstractButton
+clicked()
+pressed()
QPushButton
+setDefault(bool)
QToolButton
QRadioButton
QCheckBox
QCommandLinkButton
QDialogButtonBox
QButtonGroup

QWidget类的主要属性和接口函数

  • sizePolicy (type:QSizePolicy)

QSizePolicy类用于描述布局中的水平和垂直大小调整策略。它包含两个枚举值(垂直、水平)其值是枚举类型QSizePolicy:policy,还包含stretch值

控制控件在布局中的大小调整行为,通过 QSizePolicy::setHorizontalPolicy()QSizePolicy::setVerticalPolicy() 设置

值 (枚举常量)描述典型应用场景
Fixed控件大小固定为 sizeHint(),不可拉伸或收缩标签、图标等固定大小元素
MinimumsizeHint() 是控件的最小大小,可拉伸但不可收缩按钮、输入框等
MaximumsizeHint() 是控件的最大大小,可收缩但不可拉伸工具栏等限制最大宽度的元素
Preferred控件首选 sizeHint() 大小,既可拉伸也可收缩大多数控件的默认策略
Expanding首选 sizeHint(),但会主动争取额外空间(比 Preferred 更高优先级)文本编辑器、表格等
MinimumExpandingMinimum,但会主动争取额外空间进度条等
Ignored完全忽略 sizeHint(),按可用空间自由调整占位符或特殊布局情况

QWidget作为窗口时的一些函数和属性

属性名 | 类型/返回值	| 说明
------------------------------
enabled			bool			控件是否启用 (setEnabled())
visible			bool			是否可见 (setVisible())
geometry		QRect			位置和大小 (setGeometry())
windowTitle		QString			窗口标题 (setWindowTitle())
windowOpacity	qreal			透明度 0.0~1.0 (setWindowOpacity())
sizePolicy		QSizePolicy		布局大小策略 (setSizePolicy())
focusPolicy		Qt::FocusPolicy	焦点获取方式 (setFocusPolicy())// 位置和大小
void move(int x, int y);                // 设置位置
void resize(int w, int h);              // 设置大小
QRect frameGeometry() const;            // 包含窗口装饰的几何体// 坐标转换
QPoint mapToGlobal(const QPoint &pos);  // 控件坐标 → 屏幕坐标
QPoint mapFromGlobal(const QPoint &pos);// 屏幕坐标 → 控件坐标// 样式表
void setStyleSheet(const QString &styleSheet);// 字体和调色板
void setFont(const QFont &font);
void setPalette(const QPalette &palette);// 光标
void setCursor(const QCursor &cursor);   // 设置鼠标悬停样式// 事件重写(需子类化)
void mousePressEvent(QMouseEvent *event) override;
void paintEvent(QPaintEvent *event) override;
void resizeEvent(QResizeEvent *event) override;// 事件过滤
void installEventFilter(QObject *filterObj);
bool eventFilter(QObject *watched, QEvent *event) override;// 父子层级
void setParent(QWidget *parent);        // 设置父控件
QWidget *parentWidget() const;          // 获取父控件// 布局
void setLayout(QLayout *layout);        // 设置布局管理器
QLayout *layout() const;                // 获取布局void setFocus();                        // 强制获取焦点
bool hasFocus() const;                  // 是否拥有焦点
void clearFocus();                      // 释放焦点

布局管理

在这里插入图片描述
布局管理也是通过一些类实现的,经过预编译后,被转换为C++代码

QStackedLayout(堆叠布局)在Designer里没有体现,它提供了一个组件堆叠,基中一次只有一个可见

容器组件

在这里插入图片描述

可以将一组需要布局管理的组件放在一个容器组件中,这样,当容器大小变化时,里面的组件也会自动变化

水平布局

在这里插入图片描述

  • layoutStretch:0,0,0,表示3个组件平均分配宽度
  • layoutStretch:0,0,2,前两个组件达到合适宽度后不再增加宽度,其余的空间分配给第三个组件
  • layoutStretch:1,1,2,表示前两个组件达到合适宽度后将尽量满足1:1:2的比例

网格布局

在这里插入图片描述
在Layout中单独设置Stretch值的意义不大

QGridLayout类添加组件的函数是addWidget()

分割条

分割条允许用户通过拖动widget之间的边界来控制widget的大小,任意数量的部件都可以由单个分割条控制。QSplitter的典型用法就是创建几个小widget,并使用insertWidget()或addWidget()添加它们

QSplitter* splitter = new QSplitter(this);
QListView* listView = new QListView;
QTreeView* treeView = new QTreeView;
QTextEdit* textEdit = new QTextEdit;splitter->addWidget(listView );
splitter->addWidget(treeView );
splitter->addWidget(textEdit );

效果展示

在这里插入图片描述

http://www.dtcms.com/a/339618.html

相关文章:

  • 芯片没有型号能解密程序么?
  • 多线程—飞机大战排行榜功能(2.0版本)
  • 量化交易 - 概念板块对应股票 python代码
  • IEEE Transactions on Communications (TCOM) 投稿状态记录
  • 右值引用与移动语义【C++进阶每日一学】
  • Chrome插件开发【windows】
  • Infusing fine-grained visual knowledge to Vision-Language Models
  • Kotlin 协程之Channel
  • Python脚本每天爬取微博热搜-升级版
  • 电商数据分析可视化预测系统
  • GPT-5论文写作全流程提示词库
  • 点大餐饮独立版系统源码v1.0.3+uniapp前端+搭建教程
  • 图像采集卡与工业相机:机器视觉“双剑合璧”的效能解析
  • spring事务(@Transactional)失效的情景及处理
  • RabbitMQ:SpringAMQP 多消费者绑定同一队列
  • shenyu网关与与nacos业务网关的定位
  • 源网荷储 + 微电网:1+1 如何大于 2?能源协同解决方案
  • c++日志宏 INFO(...)
  • Webpack 5 配置完全指南:从入门到精通
  • Docker镜像--镜像分层、UnionFS、镜像发布、私有库Registry
  • Java -- 用户线程和守护线程--线程同步机制
  • 大模型问题:幻觉分类+原因+各个训练阶段产生幻觉+幻觉的检测和评估基准
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯|18th Aug. , 2025
  • 【GNSS定位原理及算法杂记6】​​​​​​PPP(精密单点定位)原理,RTK/PPK/PPP区别讨论
  • usb通信中工作模式:主机模式和设备模式
  • 2025年渗透测试面试题总结-21(题目+回答)
  • 水闸安全监测的主要核心内容
  • Java NIO 核心精讲(上):Channel、Buffer、Selector 详解与 ByteBuffer 完全指南
  • 数字政务安全实战:等保2.0下OA系统的身份认证与数据防护
  • 微软AD国产化替换倒计时——不是选择题,而是生存题