QT QGridLayout控件 全面详解

         本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、Item Virws (Model-Based)  (listView、treeView、tableView、columnView、undoView) 、DisPlay Widgets(listWidget、treeWidget、tableWidget)、Containers(groupBox、scrollArea、toolBox、tabWidget、stackedWidget、frame、widget、mdiArea、dockWidget、axWidget)、Input Widgets(comboBox、fontComboBox、lineEdit、textEdit、plainTextEdit、spinBox、doubleSpinBox、timeEdit、dateEdit、dateTimeEdit、dial、horizontalScrollBar、verticalScrollBar、horizontalSlider、verticalSlider、keySequenceEdit)、item Widgets(Item-Based) (label、textBrowser、graphicsView、calendarWidget、lcdNumber、progressBar、line、openGLWidget、quickWidget) 界面的自适应界面的开发,控件接口的调用、QSS样式的举例,较为全面且详细的介绍了所有的控件。       

        本文详细的介绍了QGridLayout控件的各种操作,例如 头文件、创建控件 、创建Layout、添加控件、添加控件伸缩因子、添加间隔和边距、插入控件、移除控件、清空布局、获取控件、设置布局到窗口、.h源代码、cpp源代码、继承关系、系列文章等等操作
        本系列QT全面详解文章目前共有五十七篇,本系列文章较为详细的讲述了QT控件的操作和使用。

选择付费专栏

1.内容全面:常用接口的所有操作 详细举例

2.内容详细:QSS、信号槽 详细举例

3.快速开发:日常开发中所有控件 逐个精通

4.控件全面:QT中所有控件包含其中 全面熟悉

5.内容保障:57种控件全部涵盖其中 内容全面

6.内容质量:QT控件使用详解专栏 质量分>90分, 阅读量超30万+

7.控件精通:全面学习速成 界面大师

8.高效学习:不到一个月精通全部控件

版权声明:本文禁止转载、复制二次发布,仅供付费读者研究 

有相关问题请联系 Dream.2017@qq.com 官方网站 www.dreambegins.vip

QT QGridLayout控件 全面详解目录

1 头文件

2 创建控件

3 创建Layout

4 添加控件

5 添加控件并设置行和列的跨度

6 设置间隔和边距

7 移除控件

8 清空布局

9 获取控件

10 设置布局到窗口

11 .h源文件

12 .cpp源文件

13 继承关系

14 相关文章

15 系列文章


        QGridLayout是Qt框架中的一种布局管理器,用于在网格中排列控件。它允许你将控件放置在一个二维的网格中,指定每个控件的行和列位置。这种布局方式非常灵活,适合用于复杂的界面设计。

网格排列:QGridLayout允许你在多个行和列中放置控件,可以精确控制每个控件的位置。

自动调整大小:当窗口大小改变时,QGridLayout会自动调整子控件的大小和位置。

控件合并:可以通过合并多个行或列来创建更大的控件区域,使用addWidget()方法的额外参数来实现。

间距和边距:可以设置控件之间的间距和布局的边距,以控制布局的外观。

1 头文件

#include <QGridLayout>

2 创建控件

#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QLabel>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建主窗口
    QWidget window;
    window.setWindowTitle("QGridLayout Example");

    // 创建QGridLayout
    QGridLayout *gridLayout = new QGridLayout(&window);

    // 创建控件
    QLabel *label1 = new QLabel("Label 1");
    QLabel *label2 = new QLabel("Label 2");
    QPushButton *button1 = new QPushButton("Button 1");
    QPushButton *button2 = new QPushButton("Button 2");
    QPushButton *button3 = new QPushButton("Button 3");

    // 添加控件到网格布局
    gridLayout->addWidget(label1, 0, 0); // 第一行第一列
    gridLayout->addWidget(label2, 0, 1); // 第一行第二列
    gridLayout->addWidget(button1, 1, 0); // 第二行第一列
    gridLayout->addWidget(button2, 1, 1); // 第二行第二列
    gridLayout->addWidget(button3, 2, 0, 1, 2); // 第三行,跨越两列

    // 设置行和列的拉伸因子
    gridLayout->setRowStretch(1, 1); // 第二行拉伸
    gridLayout->setColumnStretch(1, 1); // 第二列拉伸

    // 设置布局
    window.setLayout(gridLayout);
    window.resize(300, 200);
    window.show();

    return app.exec();
}

3 创建Layout

QGridLayout *gridLayout = new QGridLayout();

4 添加控件

使用 addWidget() 方法将控件添加到指定的行和列。

	QPushButton *button1 = new QPushButton("按钮 1");
	QPushButton *button2 = new QPushButton("按钮 2");
	gridLayout->addWidget(button1, 0, 0); // 在第 0 行第 0 列添加按钮 1
	gridLayout->addWidget(button2, 0, 1); // 在第 0 行第 1 列添加按钮 2

5 添加控件并设置行和列的跨度

你可以使用 addWidget() 方法的额外参数设置控件在网格中占用的行和列的跨度。

	QPushButton *button3 = new QPushButton("按钮 3");
	gridLayout->addWidget(button3, 1, 0, 1, 2); // 在第 1 行第 0 列添加按钮 3,占用 1 行 2 列

6 设置间隔和边距

使用 setSpacing() 和 setContentsMargins() 方法设置控件之间的间隔和布局的边距。

	gridLayout->setSpacing(10); // 设置控件之间的间隔为 10 像素
	gridLayout->setContentsMargins(15, 15, 15, 15); // 设置布局的边距

7 移除控件

使用 removeWidget() 方法可以从布局中移除控件。

gridLayout->removeWidget(button1); // 从布局中移除 button1

8 清空布局

如果你想清空布局中的所有控件,可以使用 QLayout::deleteLater() 方法。

	//QLayoutItem *item;
	//while ((item = gridLayout->takeAt(0)) != nullptr) {
	//	delete item->widget(); // 删除控件
	//	delete item; // 删除布局项
	//}

9 获取控件

你可以使用 itemAt() 方法获取布局中的控件。

QWidget *widget = gridLayout->itemAt(0)->widget(); // 获取索引 0 处的控件

10 设置布局到窗口

将布局设置为窗口的布局。

	//QWidget *window = new QWidget;
	//window->setLayout(gridLayout);
	//window->show();

11 .h源文件

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QGridLayout.h"

#include <QWidget>
#include <QPushButton>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QDebug>


class QGridLayout : public QMainWindow
{
    Q_OBJECT

public:
    QGridLayout(QWidget *parent = nullptr);
    ~QGridLayout();

private:
    Ui::QGridLayoutClass ui;
};

12 .cpp源文件

#include "QGridLayout.h"

QGridLayout::QGridLayout(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

	QGridLayout *gridLayout = new QGridLayout();

	QPushButton *button1 = new QPushButton("按钮 1");
	QPushButton *button2 = new QPushButton("按钮 2");
	gridLayout->addWidget(button1, 0, 0); // 在第 0 行第 0 列添加按钮 1
	gridLayout->addWidget(button2, 0, 1); // 在第 0 行第 1 列添加按钮 2

	QPushButton *button3 = new QPushButton("按钮 3");
	gridLayout->addWidget(button3, 1, 0, 1, 2); // 在第 1 行第 0 列添加按钮 3,占用 1 行 2 列

	gridLayout->setSpacing(10); // 设置控件之间的间隔为 10 像素
	gridLayout->setContentsMargins(15, 15, 15, 15); // 设置布局的边距

	gridLayout->removeWidget(button1); // 从布局中移除 button1

	//QLayoutItem *item;
	//while ((item = gridLayout->takeAt(0)) != nullptr) {
	//	delete item->widget(); // 删除控件
	//	delete item; // 删除布局项
	//}

	QWidget *widget = gridLayout->itemAt(0)->widget(); // 获取索引 0 处的控件

	//QWidget *window = new QWidget;
	//window->setLayout(gridLayout);
	//window->show();
}

QGridLayout::~QGridLayout()
{}

13 继承关系

14 相关文章

15 系列文章

ps: 其它说明

希望大家多点点赞,收藏,也希望多评论,指出不足的地方,因为是系列文章所以有不足的地方会整个系列优化,谢谢大家支持

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Adobe Illustrator 2024 安装教程与下载分享

介绍一下 下载直接看文章末尾 Adobe Illustrator 是一款由Adobe Systems开发的矢量图形编辑软件。它广泛应用于创建和编辑矢量图形、插图、徽标、图标、排版和广告等领域。以下是Adobe Illustrator的一些主要特点和功能&#xff1a; 矢量绘图&#xff1a;Illustrator使用矢量…

IDEA2023设置控制台日志输出到本地文件

1、Run->Edit Configurations 2、选择要输出日志的日志&#xff0c;右侧&#xff0c;IDEA2023的Logs在 Modify option 里 选中就会展示Logs栏。注意一定要先把这个日志文件创建出来&#xff0c;不然不会自动创建日志文件的 IDEA以前版本的Logs会直接展示出来 3、但是…

[UE5学习] 一、使用源代码安装UE5.4

一、简介 本文介绍了如何使用源代码安装编译UE5.4&#xff0c;并且新建简单的项目&#xff0c;打包成安卓平台下的apk安装包。 二、使用源代码安装UE5.4 注意事项&#xff1a; 请保证可以全程流畅地科学上网。请保证C盘具有充足的空间。请保证接下来安装下载的visual studi…

细说敏捷:敏捷四会之standup meeting

上一篇文章中&#xff0c;我们讨论了 敏捷四会 中 冲刺计划会 的实施要点&#xff0c;本篇我们继续分享敏捷四会中实施最频繁&#xff0c;团队最容易实施但往往也最容易走形的第二个会议&#xff1a;每日站会 关于每日站会的误区 站会是一个比较有标志性的仪式活动&#xff0…

10M和100M网口的编码及EMC影响

10M网口编码技术 10M网口&#xff0c;即10Base-T&#xff0c;采用的是曼彻斯特编码方法 。在这种编码中&#xff0c;“0”由“”跳变到“-”&#xff0c;而“1”由“-”跳变到“” 。这种编码方式的特点是信号的DC平衡&#xff0c;即信号在任何一段时间内的平均电压为零&#…

docker基本使用

参考视频&#xff1a; 参考视频https://www.bilibili.com/video/BV1e64y1F7pJ/?share_sourcecopy_web&vd_source8fc0c76c477d3db71f89fa5ae5b258c7 docker容器操作&#xff1a; 拉取镜像&#xff1a; 拉取官网ubuntu镜像 sudo docker pull ubuntu 运行镜像&#xff1a;…

音频信号采集前端电路分析

音频信号采集前端电路 一、实验要求 要求设计一个声音采集系统 信号幅度&#xff1a;0.1mVpp到1Vpp 信号频率&#xff1a;100Hz到16KHz 搭建一个带通滤波器&#xff0c;滤除高频和低频部分 ADC采用套件中的AD7920&#xff0c;转换率设定为96Ksps &#xff1b;96*161536 …

构建高效在线教育:SpringBoot课程管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理在线课程管理系统的相关信息成为必然。开发…

【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践

文章目录 一、前言二、什么是“纵深安全防御”&#xff1f;三、为什么有必要采用纵深安全防御策略&#xff1f;四、以亚马逊云科技为案例了解纵深安全防御策略设计4.1 原始设计缺少安全策略4.2 外界围栏构建安全边界4.3 访问层安全设计4.4 实例层安全设计4.5 数据层安全设计4.6…

基于LiteFlow的风控系统指标版本控制

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 更新日志 最近关于https://github.com/wnhyang/coolGuard此项目更新了如下内容&#xff1a;https://g…

Spring:AOP切入点表达式

对于AOP中切入点表达式&#xff0c;我们总共会学习三个内容&#xff0c;分别是语法格式、通配符和书写技巧。 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法切入点表达式:要进行增强的方法的描述方式 对于切入点的描述&#xff0c;我们其实是有两中方式的&a…

docker搭建私有的仓库

docker搭建私有仓库 一、为什么要搭建私有的仓库&#xff1f; 因为在国内&#xff0c;访问&#xff1a;https://hub.docker.com/ 会出现无法访问页面。。。。&#xff08;已经使用了魔法&#xff09; 当然现在也有一些国内的镜像管理网站&#xff0c;比如网易云镜像服务、Dao…

大白话讲Promise(最详细)

学前端的大家都知道promise是重中之重&#xff0c;也是面试的必考项。但是刚接触promise我一直很晕头晕脑的&#xff0c;搜集文章前看后看基本都是讲解promise的状态它的方法就没有再深入了&#xff0c;以至于面试时候面试官一旦往深问我就懵了。所以今天我们就详细的说一下pro…

【笔记】自动驾驶预测与决策规划_Part7_数据驱动的预测方法

文章目录 0. 前言1. 多模态传感器的编码方式1.1 栅格化表示1.2 向量化表示 Vectornet1.3 基于点云或者多模态输入的预测1.4 基于Transformer的方法 2. 网络输出的表达形式2.1 多模态轨迹回归2.2 轨迹分类2.3 轨迹回归轨迹分类2.4 目标点预测 3.场景级别的预测和决策3.1 论文&am…

回溯法经典难题解析

本文将通过几个经典的回溯问题&#xff0c;展示回溯算法的应用及其在解决问题时的核心思想和技巧。这些问题包括全排列、全排列II、N皇后以及数独问题&#xff0c;本文将分别介绍每个问题的思路与实现。 46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有…

无线图传下的低延迟视频传输播放技术探讨

技术背景 无线图传技术即无线图像传输技术&#xff0c;是指不用布线&#xff08;线缆&#xff09;利用无线电波来传输图像数据的技术。 一、工作原理 无线图传技术主要涉及图像采集、编码、调制、发射、接收、解调、解码和图像显示等环节。 图像采集&#xff1a;通过摄像头…

软件测试面试之常规问题

1.描述一下测试过程 类似题目:测试的生命周期 思路:这是一个“范围”很大的题目&#xff0c;而且回答时间一般在3分钟之内&#xff0c;不可能非常详细的描述整个过程&#xff0c;因此答题的思路要从整体结构入手&#xff0c;不要过细。为了保证答案的准确性&#xff0c;可以引…

C++从零到满绩——类和对象(中)

目录 1>>前言 2>>构造函数&#xff08;我称之为初始化函数&#xff09; 3>>析构函数&#xff08;我称之为销毁函数&#xff09; 4>>拷贝构造函数&#xff08;我称之为复制函数&#xff09; 5>>运算符重载 5.2>>赋值运算符重载 ​编辑…

内网渗透横向移动1

1.信息收集 &#xff08;1&#xff09;判断域控 shell net time /domain shell ping OWA2010CN-God.god.org &#xff08;2&#xff09;主机探测 浏览探测->网络探测 主机列表显示&#xff1a; &#xff08;3&#xff09;域用户收集&#xff1a; shell net user /domain…

Edify 3D: Scalable High-Quality 3D Asset Generation 论文解读

目录 一、概述 二、相关工作 1、三维资产生成 2、多视图下的三维重建 3、纹理和材质生成 三、Edify 3D 1、文本生成多视角图像的扩散模型 2、文本和多视角图像生成法线图像的ControlNet 3、重建与渲染模型 4、多视角高分辨率RGB图像生成 四、训练 1、训练过程 2、…