Qt 控件与布局管理

1. Qt 控件的父子继承关系

在 Qt 中,继承自 QWidget 的类,通常会在构造函数中接收一个 parent 参数。

这个参数用于指定当前空间的父控件,从而建立控件间的父子关系。

当一个控件被设置为另一控件的子控件时,它会自动成为该父控件的一部分,且具备以下特性:

  • 子控件会随着父控件,一起显示或隐藏;

  • 子控件会被包含在父控件的几何布局中;

  • 当父控件被删除时,所有的子控件会被自动删除,防止内存泄漏。

// .h
class SessionFriendArea : public QScrollArea
{Q_OBJECT
public:QWidget* container;
}// .cpp
SessionFriendArea::SessionFriendArea(QWidget *parent): QScrollArea{parent}
{container = new QWidget();this->setWidget(container);
}

SessionFriendItem 的构造函数中, parent 被传递给 QScrollArea 的构造函数 —— 让 QScrollArea 成为父控件的一部分,从而正确地管理其生命周期和位置。

在构造函数体中,创建 container 并设置为 this 的子控件(即 QScrollArea 的子控件):

​ container 会随 QScrollArea 的 显示/隐藏 而 显示/隐藏;

​ container 的生命周期与 QScrollArea 绑定,当 QScrollArea 被销毁时,container 也会被自动销毁。

2. QWidget 和 QLayout

在 Qt 中,QWidgetQLayout 之间的关系是紧密且互补的。

理解它们的关系,对构建复杂的用户界面统至关重要。

2.1 QWidget 简介

QWidget 是所有界面对象的基类,代表了一个可以显示和交互的窗口部件(控件),如:按钮、标签、窗口。

每个 QWidget 可以有自己的几何属性(位置、大小)、样式、事件处理机制等。

2.2 QLayout 简介

QLayout 是一个抽象基类,用于管理一组 QWidget 的布局。

它的主要作用是,自动调整这些控件的位置和大小,以便它们能适应不同的窗口大小和分辨率。

常见的布局管理器:QVBoxLayoutQHBoxLayoutQGridLayout

2.3 QWidget 包含 QLayout

可以通过 QWidget::setLayout(QLayout*) 方法,将一个布局管理器设置给 QWidget ;

也可以通过 QWidget::Layout() 方法,获取 QWidget 内的布局。

QWidget* widget = new QWidget();
QVBoxLayout* layout = new QVBoxLayout();QPushButton* btn1 = new QPushButton();
btn1->setText(QString("按钮1"));QPushButton* btn2 = new QPushButton();
btn2->setText(QString("按钮2"));layout->addWidget(btn1);
layout->addWidget(btn2);widget->setLayout(layout); // 设置布局

当 QWidget 被赋予一个布局时,该布局会自动管理,所有添加到该该布局中的子控件的位置和大小。

2.4 QLayout 包含 QWidget

可以通过 QLayout::addWidget(QWidget*) ,将控件=添加到布局中;

也可以通过 QLayout::addLayout() 方法,将一个布局嵌套在另一个布局中,从而实现复杂的界面结构。

布局管理器会根据其规则(垂直排列、水平排列、网格排列等),自动调整这些控件的位置和大小。

int main(int argc, char *argv[])
{QApplication a(argc, argv);QWidget* widget = new QWidget();QVBoxLayout* mainlayout = new QVBoxLayout();QHBoxLayout* sublayout = new QHBoxLayout();QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");QPushButton* btn3 = new QPushButton("按钮3");sublayout->addWidget(btn2);sublayout->addWidget(btn3);mainlayout->addWidget(btn1);mainlayout->addLayout(sublayout);widget->setLayout(mainlayout);widget->show();return a.exec();
}

3. Qt 控制窗口大小方法
  • setFixedSize() :设置控件的固定高度和宽度 —— 使得控件的大小,不会随窗口或布局管理器的变化而改变。

​ QPushButton* btn = new QPushButton();

​ btn->setFixedSize(QSize(50, 50));

  • setFixedWidth()setFixedHeight() :分别设置控件的固定宽度和高度。
  • setMinimunSize()setMaximunSize() :分别设置控件的最小尺寸和最大尺寸。
  • setSizePolicy() :设置控件的尺寸策略,定义了控件如何响应布局管理器的要求及窗口大小的变化.

​ Fixed 、Preferred 、Expanding

tips:

  1. 对于 QPushButton ,setFixedSize() 的作用是设置控件的大小;setIconSize() 的作用是设置控件图标的大小(在 setIcon() 后)。
  2. 大多数情况下,调用 setFixedSize() 等方法后,无需额外调用 setSizePolicy() 。
4. QScrollArea

QScrollArea 是一个用于显示可滚动内容的容器控件。

它允许用户通过滚动条,查看超出窗口可视范围的内容。

  • setWidgetResizable(bool resizable) :决定是否自动调整内部小部件的大小以适应窗口大小。
  • verticalScrollBar() :返回与 QScrollArea 关联的垂直方向上的滚动条。
  • horizontalScrollBar() :返回与 QScrollArea 关联的水平方向上的滚动条。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20250122-正则表达式

1. 正则标记 表示一位字符:\\ 表示指定的一位字符:x 表示任意的一位字符:. 表示任意一位数字:\d 表示任意一位非数字:\D 表示任意一个字母:[a-zA-Z](大写或小写) 表示任意一个…

基于DNN深度神经网络的OFDM+QPSK信号检测与误码率matlab仿真

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 在现代通信…

一文详解Filter类源码和应用

背景 在日常开发中,经常会有需要统一对请求做一些处理,常见的比如记录日志、权限安全控制、响应处理等。此时,ServletApi中的Filter类,就可以很方便的实现上述效果。 Filter类 是一个接口,属于 Java Servlet API 的一部…

switch组件的功能与用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了PageView这个Widget,本章回中将介绍Switch Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的Switch是指左右滑动的开关,常用来表示某项设置是打开还是关闭。Fl…

C++ 复习总结记录九

C 复习总结记录九 主要内容 1、list 介绍及使用 2、list 剖析及模拟实现 3、list 与 vector 对比 一 list 介绍及使用 List 相关文档 1、List 在任意位置进行插入和删除的序列式容器 O(1) ,且该容器可前后双向迭代 2、List 底层是带头双向循环链表&#xff…

从音频到 PDF:AI 全流程打造完美英文绘本教案

今天把英文绘本的自学教案自动生成流程完成了,我分享一下整个实现思路,让你也轻松搞定英文绘本教案的产出,让孩子的学习之路更加顺畅。  从音频到 PDF:AI 全流程打造完美英文绘本教案 一、音频转文本:AI 助力第一步 …

(5)STM32 USB设备开发-USB键盘

讲解视频:2、USB键盘-下_哔哩哔哩_bilibili 例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为使用使用STM32模拟USB键盘的例程,没有知识,全是实操,按照步骤就能获得一个STM32的USB键盘。本例子是…

初步认识操作系统(Operator System)

目录 一、概念二、设计OS的目的三、定位四、操作系统上下的分级五、如何理解 "管理"六、总结 一、概念 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。操作系统包括: 内核(进程管理,内存管理&#xff0c…

LINUX 平台最快子网路由转发,内核使能选项配置

阅读本文之间,可线性参考以下文献。 Linux 命令行配置为单臂旁路由。_linux单臂路由-CSDN博客 Linux 软路由命令行配置(参考)_linux软路由-CSDN博客 VGW在 Windows 平台上局域网就绪的旁路由器程序_windows旁路由-CSDN博客 本文介绍 LINUX…

python创建一个httpServer网页上传文件到httpServer

一、代码 1.server.py import os from http.server import SimpleHTTPRequestHandler, HTTPServer import cgi # 自定义请求处理类 class MyRequestHandler(SimpleHTTPRequestHandler):# 处理GET请求def do_GET(self):if self.path /:# 响应200状态码self.send_response(2…

一文讲解Java中的重载、重写及里氏替换原则

提到重载和重写,Java小白应该都不陌生,接下来就通过这篇文章来一起回顾复习下吧! 重载和重写有什么区别呢? 如果一个类有多个名字相同但参数不同的方法,我们通常称这些方法为方法重载Overload。如果方法的功能是一样…

Java Swing 基础组件详解 [论文投稿-第四届智能系统、通信与计算机网络]

大会官网:www.icisccn.net Java Swing 是一个功能强大的 GUI 工具包,提供了丰富的组件库用于构建跨平台的桌面应用程序。本文将详细讲解 Swing 的基础组件,包括其作用、使用方法以及示例代码,帮助你快速掌握 Swing 的核心知识。 一…

前端小案例——520表白信封

前言:我们在学习完了HTML和CSS之后,就会想着使用这两个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…

Github 2025-01-25Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-01-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Vue项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型…

Arcgis国产化替代:Bigemap Pro正式发布

在数字化时代,数据如同新时代的石油,蕴含着巨大的价值。从商业决策到科研探索,从城市规划到环境监测,海量数据的高效处理、精准分析与直观可视化,已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…

MFC结构体数据文件读写实例

程序功能将结构体内数组数据写入文件和读出 2Dlg.h中代码: typedef struct Student {int nNum[1000];float fScore;CString sss;}stu; class CMy2Dlg : public CDialog { // Construction public:CMy2Dlg(CWnd* pParent NULL); // standard constructorstu stu1; ... } 2Dl…

零售业革命:改变行业的顶级物联网用例

mpro5 产品负责人Ruby Whipp表示,技术进步持续重塑零售业,其中物联网(IoT)正引领这一变革潮流。 研究表明,零售商们正在采用物联网解决方案,以提升运营效率并改善顾客体验。这些技术能够监控运营的各个方面…

(一)QT的简介与环境配置WIN11

目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt(发音:[kjuːt],类似“cute”)是一个跨平台的开发库,主要用于开发图形用户界面(GUI)应用程序,…

MySQL用户授权、收回权限与查看权限

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

XML实体注入漏洞攻与防

JAVA中的XXE攻防 回显型 无回显型 cve-2014-3574