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

news2024/9/27 9:23:00

往期回顾:

【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,所以添加控件都是addWidget
    pHLay->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,所以添加控件都是addWidget
    pHLay->addWidget(pPath);
    pHLay->addWidget(pLine);
    pHLay->addWidget(pBtn);
}

Widget::~Widget() {}

最终结果: 


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

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

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

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

相关文章

PyQT5学习--新建窗体模板

目录 1 Dialog 2 Main Window 3 Widget Dialog 模板&#xff0c;基于 QDialog 类的窗体&#xff0c;具有一般对话框的特性&#xff0c;如可以模态显示、具有返回值等。 Main Window 模板&#xff0c;基于 QMainWindow 类的窗体&#xff0c;具有主窗口的特性&#xff0c;窗口…

计算机网络基础——网络安全/ 网络通信介质

chapter3 网络安全与管理 1. 网络安全威胁 网络安全&#xff1a;目的就是要让网络入侵者进不了网络系统&#xff0c;及时强行攻入网络&#xff0c;也拿不走信息&#xff0c;改不了数据&#xff0c;看不懂信息。 事发后能审查追踪到破坏者&#xff0c;让破坏者跑不掉。 网络…

Composer常见错误解决

Composer 是 PHP 开发中常用的依赖管理工具&#xff0c;但在使用过程中可能会遇到各种错误。以下是一些常见的 Composer 错误以及相应的解决方法&#xff0c;希望能帮助你更好地解决这些问题。 Memory exhausted 解决方法&#xff1a; 增加内存限制&#xff0c;可以通过在命令…

基于随机森林与LSTM神经网络的住宅用电比较分析及预测 代码+论文 完整毕设

摘要 本文旨在探讨基于随机森林&#xff08;Random Forest&#xff09;与长短期记忆神经网络&#xff08;Long Short-Term Memory, LSTM&#xff09;的住宅用电比较分析及预测方法。随机森林是一种集成学习方法&#xff0c;通过构建多个决策树进行预测&#xff0c;具有较强的鲁…

掌握多线程之精髓:优雅地等待线程结果并继续后续操作

在当今这个信息爆炸的时代&#xff0c;多线程编程已成为高效处理并发任务的重要工具。然而&#xff0c;如何在多线程编程中优雅地等待线程结果并继续后续操作&#xff0c;却是一个让人头疼的问题。今天&#xff0c;我们就来探讨如何使用Executors.newFixedThreadPool和executor…

让IIS支持.NET Web Api PUT和DELETE请求

前言 有很长一段时间没有使用过IIS来托管应用了&#xff0c;今天用IIS来托管一个比较老的.NET Fx4.6的项目。发布到线上后居然一直调用不同本地却一直是正常的&#xff0c;关键是POST和GET请求都是正常的&#xff0c;只有PUT和DELETE请求是有问题的。经过一番思考忽然想起来了I…

如何在群晖NAS中创建FTP公网地址实现远程上传下载本地文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分…

基于STELLA系统动态模拟技术及在农业、生态及环境科学中的应用教程

原文链接&#xff1a;基于STELLA系统动态模拟技术及在农业、生态及环境科学中的应用教程http://基于STELLA系统动态模拟技术及在农业、生态及环境科学中的应用教程 前言 STELLA是一种用户友好的计算机软件。通过绘画出一个系统的形象图形&#xff0c;并给这个系统提供数学公式…

WEBSERVICE 大文件上传,断点续传分段

最新版本&#xff1a;6.5.40 在线代码&#xff1a;up6-asp-net: Web大文件上传-asp.net示例 - Gitee.com 视频教程&#xff1a;https://www.ixigua.com/7200367234802418187 NOSQL NOSQL无需任何配置可直接访问页面进行测试 SQL 使用IIS 大文件上传测试推荐使用IIS以获取更…

伦敦金实时行情交易需要了解的3个事实

在伦敦金市场中&#xff0c;我们要交易就要面对伦敦金实时行情。然而&#xff0c;在伦敦金实时行情交易中&#xff0c;有几个事实是我们不得不去了解的&#xff0c;下面我们就来讨论一下。 盈利的经历不等于盈利的能力。我们经常看到一些卖课的或者卖指标、卖策略的人会宣传自己…

大数据篇 一篇讲明白 Hadoop 生态的三大部件

大数据Hadoop 生态的三大部件的目录 往期热门专栏回顾前言1、HDFS2、Yarn3、Hive4、HBase4.1&#xff0e;特点4.2&#xff0e;存储 5、Spark及Spark Streaming关于作者 往期热门专栏回顾 专栏描述Java项目实战介绍Java组件安装、使用&#xff1b;手写框架等Aws服务器实战Aws L…

linux系统systemd使用

一、开机启动 所有支持systemd的服务&#xff0c;在安装后&#xff0c;会在/usr/lib/systemd/system中添加一个配置文件&#xff0c;如果需要让当前的服务在开机的时候自动启动&#xff0c;则需要执行以下命令&#xff0c;以firewalld为例 systemctl enable firewalld.servic…

全局UI方法-弹窗六-自定义弹窗

1、描述 通过CustomDialogController类显示自定义弹窗。使用弹窗组件时&#xff0c;可优先考虑自定义弹窗&#xff0c;便于自定义弹窗的样式与内容。 2、接口 CustomDialogController(value:{builder: CustomDialog, cancel?: () > void, autoCancel?: boolean, alignme…

精品凉拌菜系列热卤系列课程

这一系列课程涵盖精美凉拌菜和美味热卤菜的制作技巧。学员将学习如何选材、调味和烹饪&#xff0c;打造口感丰富、色香俱佳的菜肴。通过实践训练&#xff0c;掌握独特的烹饪技能&#xff0c;为家庭聚餐或职业厨艺提升增添亮点。 课程大小&#xff1a;6.6G 课程下载&#xff1…

Linux系统使用Docker搭建Traefik结合内网穿透实现公网访问管理界面

文章目录 一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 Zotero 是一款全能型 文献管理器,可以 存储、管理和引用文献&#xff0c;不但免费&#xff0c;功能还很强大实用。 ​ Zotero 支…

修改mysql密码

1.在此处文件夹下打开cmd 2.输入命令mysqladmin -uroot -p旧密码 password 新密码 3.在navicat进行测试连接

鱼哥赠书活动第14期:看完这本《数字化运维》掌握数字化运维方法,构建数字化运维体系

鱼哥赠书活动第14期&#xff1a;看完这本《数字化运维》掌握数字化运维方法&#xff0c;构建数字化运维体系 主要内容&#xff1a;读者对象&#xff1a;赠书抽奖规则:往期赠书福利&#xff1a; 数字化转型已经成为大势所趋&#xff0c;各行各业正朝着数字化方向转型&#xff0c…

请查收!一份Go代码优化实用指南

Go非常适合构建高性能应用&#xff0c;本文通过对整型切片求和代码的优化&#xff0c;介绍了常用的Go代码优化方案&#xff0c;从而让代码获得更好的性能。原文: Optimizing Go Code: A Practical Guide 代码优化是软件开发流程中的关键步骤&#xff0c;从而确保程序高效运行、…

Vercel搭建线上项目 (无服务器版-免费)

前言 假如想做一个简单的功能&#xff0c;例如一个博客网站或网页小程序&#xff0c;以往我是要先花几百元购买ECS服务器&#xff0c;在服务器上安装运维面板、再安装Nginx、MySQL、NodeJS、Java、PHP等环境&#xff0c;最后实现一个API服务器。 这种传统模式不但有着较高的技…

企业指标体系的落地与推广:让指标体系真正发挥作用

一、精心策划实施计划&#xff0c;确保项目有序进行 为确保指标体系的顺利落地与推广&#xff0c;我们精心策划了实施计划。首先&#xff0c;我们制定了详细的时间表&#xff0c;明确了项目启动、关键节点和结束时间&#xff0c;确保项目能够按期推进。同时&#xff0c;我们还将…