【QT入门】 Qt代码创建布局之水平布局、竖直布局详解

2024-03-27 22:28

本文主要是介绍【QT入门】 Qt代码创建布局之水平布局、竖直布局详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

往期回顾:

【QT入门】 Qt实现自定义信号-CSDN博客

【QT入门】 Qt自定义信号后跨线程发送信号-CSDN博客

【QT入门】 Qt内存管理机制详解-CSDN博客

【QT入门】 Qt代码创建布局之水平布局、竖直布局详解

先看两个问题:

1、ui设计器设计界面很方便,为什么还要手写代码?

(1)更好的控制布局
(2)更好的设置qss
(3)代码复用

2、完全不会写Qt布局,很麻烦,怎么学会手写布局?

(1) 看Qt自己怎么写
(2)改良Qt的布局写法

下面正式看水平布局方法: 

一、布局管理器常用方法

◆setMargin:设置水平布局最外边界与相邻控件左上右下的间隙,这时左上右下的间隙相同
◆setSpacing: 设置相邻控件之间的间隙,默认值大概是7
spacing()可以获取系统默认的Spacing大小
addSpacing:在setSpacing的基础上进行相加,例如addSpacing(-7),相当于两个控件之间没有距离; addSpacing(13)相 当于setSpacing(20);
◆addStretch()在水平布局时添加一个水平的伸缩空间(QSpacerltem),在竖直布局时,添加一个竖直的伸缩空间

注意:setMargin方法只能设置相同的间隙,如果想上下左右设置成不同,可以使用setContentsMargins方法,这个方法四个参数,就是按照左上右下的顺序的

setContentsMargins(左,上,右,下);

二、如何用代码创建水平布局

 1、QHBoxLayout

创建水平布局需要用到QHBoxLayout类

包含头文件#include <QHBoxL ayout>
创建水平布局QHBoxLayout *pHLay = new QHBoxLayout(父窗口指针);//一般填this,

2、创建需要的控件

#include <QLabel>
#include<QLineEdit>
#include <QPushButton>QLabel* pPath = new QLabel(this);QLineEdit* pLine = new QLineEdit(this);QPushButton* pBtn = new QPushButton(this);

3、添加控件到水平布局 

    QHBoxLayout* pHLay = new QHBoxLayout(this);//所有的控件都是派生了QWidget,所以添加控件都是addWidgetpHLay->addWidget(pPath);pHLay->addWidget(pLine);pHLay->addWidget(pBtn);
3.1.addWidget

在布局里添加一个控件,因为所有可视化控件的最终父类,都是QWidget,所以是addWidget

3.2.addLayout

在布局里添加布局,比如竖直布局里可以添加几个水平布局

3.3.为什么控件父对象都是this

我们都知道,new一个控件的时候需要指明其父对象,但是前三个控件最终都加入到QHBoxLayout中,其父对象应该是QHBoxLayout,为什么前面还是设置成this?

首先,在Qt中,当一个控件被添加到一个布局管理器中时,布局管理器会自动接管该控件的所有权,即布局管理器会成为该控件的父对象。因此,不需要显式地将这些控件的父对象设置为布局管理器。

其次,this指向当前的窗口或对话框,而布局管理器pHLay是当前窗口或对话框的子控件。因此,将这些控件的父对象设置为this是合适的做法,因为它们实际上是窗口或对话框的子控件,而不是布局管理器的子控件。

三、如何用代码创建竖直布局

 1、QVBoxLayout

竖直布局跟水平布局基本是一样的,就是所用的类有所不同,只要把水平布局熟悉,其他都的是差不多的。

#include <QVBoxLayout> //包含头文件
QVBoxLayout* pMainVLay = new QVBoxLayout(this); //创建竖直布局

四、完整代码示例

#include "widget.h"
#include <QHBoxLayout>
#include <QLabel>
#include<QLineEdit>
#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent)
{//创建水平布局QHBoxLayout *pHLay = new QHBoxLayout(this);//一般填this,QLabel* pPath = new QLabel(this);pPath->setText(u8"路径");QLineEdit* pLine = new QLineEdit(this);QPushButton* pBtn = new QPushButton(this);pBtn->setText(u8"打开");//QHBoxLayout* pHLay = new QHBoxLayout(this);//所有的控件都是派生了QWidget,所以添加控件都是addWidgetpHLay->addWidget(pPath);pHLay->addWidget(pLine);pHLay->addWidget(pBtn);
}Widget::~Widget() {}

最终结果: 


都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

这篇关于【QT入门】 Qt代码创建布局之水平布局、竖直布局详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/853592

相关文章

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的