【QT】QGridLayout的基础使用(添加控件、布局、间距)

news2024/11/17 11:52:50

目录

0.环境介绍

1.QGridLayout简介:

 2.QGridLayout参数介绍

1)添加控件方式

2)添加布局方式

3.例子及代码

1)三行三列

2)有占多行多列的控件


0.环境介绍

windows + vscode + qt

我使用网格布局的情景是(解决的问题):原本用的水平和垂直布局结合来设置整体布局,但当我第一列的label中文字变长时(中文到英文的转换),就会将第二列的QLineEdit控件往后挤,但我希望每一列都是对齐的,所以将水平和垂直布局改成了网格布局,以此来解决第二列不对齐的问题。

1.QGridLayout简介:

网格布局,也叫格栅布局(行列布局),可以将控件或者布局(layout)放入每个小格中

比如,我有一个这样的界面要实现,就可以使用网格布局

红色的线将整体分为9个块(三行三列)

可以通过添加控件(addWidget)的方式,也可以通过添加布局(addLayout)的方式将内容填充至网格布局

 2.QGridLayout参数介绍

1)添加控件方式

addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0);

参数1  QWidget *:需要填入的内容,得是一个控件,QWidget 或其子控件类;

参数2  row:填入的行数(从0开始)

参数3  column:填入的列数(从0开始)

参数4  rowSpan:占多少行

参数5  columnSpan:占多少列

注意:如果rowSpan或columnSpan的值为-1,则窗口部件将扩展到布局的底部或者右边边缘处

参数6  Qt::Alignment = 0 :对齐方式

2)添加布局方式

addLayout(QLayout *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0)

参数与addWidget() 相同

3.例子及代码

1)三行三列


代码(此类为widget类,在构造函数中创建以下代码即可):

    QLabel *lb_name = new QLabel("Project name");
    QLabel *lb_projectType = new QLabel("Detection type");
    QLabel *lb_extractProcess = new QLabel("Extraction process");

    QLineEdit *_le_name = new QLineEdit();
    QComboBox *_cb_testNames = new QComboBox;
    QComboBox *_cb_extract = new QComboBox;

    QLabel *lb_tipTitle = new QLabel("Number of tips per test");
    QLabel *lb_nameBigTip = new QLabel(QStringLiteral("1000l"));
    QLineEdit *_le_tipNumBig = new QLineEdit();
    QLabel *lb_nameSmallTip = new QLabel(QStringLiteral("200l"));
    QLineEdit *_le_tipNumSmall = new QLineEdit();

    QHBoxLayout *pHbl_tipsTitle = new QHBoxLayout;
    pHbl_tipsTitle->setContentsMargins(0,0,0,0);
    pHbl_tipsTitle->addWidget(lb_tipTitle);
    pHbl_tipsTitle->addStretch();

    QHBoxLayout *pHbl_tips_big = new QHBoxLayout;
    pHbl_tips_big->setContentsMargins(0,0,0,0);
    pHbl_tips_big->addWidget(lb_nameBigTip);
    pHbl_tips_big->addSpacing(20);
    pHbl_tips_big->addWidget(_le_tipNumBig);
    pHbl_tips_big->addStretch();

    QHBoxLayout *pHbl_tips_small = new QHBoxLayout;
    pHbl_tips_small->addWidget(lb_nameSmallTip);
    pHbl_tips_small->addSpacing(35);
    pHbl_tips_small->addWidget(_le_tipNumSmall);
    pHbl_tips_small->addStretch();

    QGridLayout *pGl_lbsAndTips = new QGridLayout();//初始化实例
    pGl_lbsAndTips->setContentsMargins(30,20,30,20);//设置四周的距离,左30上20右30下20
    pGl_lbsAndTips->setHorizontalSpacing(30);//设置水平控件之间的间隙为30,也就是每一列之间的距离
    pGl_lbsAndTips->setVerticalSpacing(10);//设置每一行之间的距离,为10

    pGl_lbsAndTips->addWidget(lb_name, 0, 0, 1, 1);//第一行第一列,占1行1列
    pGl_lbsAndTips->addWidget(lb_projectType, 1, 0, 1, 1);//第二行第一列,占1行1列
    pGl_lbsAndTips->addWidget(lb_extractProcess, 2, 0, 1, 1);//第三行第一列,占1行1列
    pGl_lbsAndTips->addWidget(_le_name, 0, 1, 1, 1);//第一行第二列,占1行1列
    pGl_lbsAndTips->addWidget(_cb_testNames, 1, 1, 1, 1);//第二行第二列,占1行1列
    pGl_lbsAndTips->addWidget(_cb_extract, 2, 1, 1, 1);//第三行第二列,占1行1列
    pGl_lbsAndTips->addLayout(pHbl_tipsTitle, 0, 2, 1, 1);//第一行第三列,占1行1列
    pGl_lbsAndTips->addLayout(pHbl_tips_big, 1, 2, 1, 1);//第二行第三列,占1行1列
    pGl_lbsAndTips->addLayout(pHbl_tips_small, 2, 2, 1, 1);//第三行第三列,占1行1列

    this->setLayout(pGl_lbsAndTips);

2)有占多行多列的控件

A:0行0列开始,占三行一列

QGridLayout *pLayout = new QGridLayout();

pLayout->addWidget(A, 0, 0, 3, 1);

B:0行1列开始,占一行两列

pLayout->addWidget(B, 0, 1, 1, 2);

C:1行1列开始,占一行两列

pLayout->addWidget(C, 1, 1, 1, 2);

D:2行1列开始,占一行一列

pLayout->addWidget(D, 2, 1, 1, 1);

E:2行2列开始,占一行一列

pLayout->addWidget(E, 2, 2, 1, 1);

F:0行3列开始,占一行一列

pLayout->addWidget(F, 0, 3, 1, 1);

G:1行3列开始,占一行一列

pLayout->addWidget(G, 1, 3, 1, 1);

H:2行3列开始,占一行一列

pLayout->addWidget(H, 2, 3, 1, 1);

以上网格布局情况可以满足基本开发,项目遇到的一个小问题,记录分享一下

--END--

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

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

相关文章

深入理解侵入式容器与非侵入式容器(intrusive containers)

再传统的数据结构的实现中,分为侵入式容器和非侵入式容器两种 侵入式容器 这也是教材喜欢使用的数据结构的实现方式 ,将数据结构放入类中,所以先讲这个 非侵入式容器: struct ListNode {ListNode *prev, *next;int value; }; …

五分钟搞懂分布式流控算法

流控是任何一个复杂系统都必须考虑的问题,本文介绍并比较了不同的流控算法,从而帮助我们可以基于系统需求和架构选择合适的方案。原文:Distributed Rate-Limiting Algorithms[1] 当我们设计分布式流控系统(distributed rate-limit…

华硕TUF GAMING B460M i5-10500 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件配置 硬件型号驱动情况 主板华硕TUF GAMING B460M-PLUS (LPC Controller B460芯片组 处理器特尔 Core i5-10500 3.10GHz六核已驱动 内存16 GB (IstRI DDR4 2666MH…

在字节划水的4年,很真实...

先简单交代一下,我是某不知名211的计算机本硕,18年毕业加入滴滴,之后跳槽到了头条,一直从事测试开发相关的工作。之前没有实习经历,算是四年半的工作经验吧。 这四年半之间完成了一次晋升,换了一家公司&am…

微信可以聚合聊天吗?如何同时管理多个微信?

现在很多企业用微信做私域流量运营,在里面搭建自己的私域流量。随着客户资源逐渐增多,需求增加,不仅需要联系客户,还要联系各大代理,开通多个微信号无疑是最佳方案。 但是不少做电商的朋友表示,微信号越来…

代理ip数据采集的优缺点

随着互联网时代的到来,数据已经成为企业发展和决策的关键。但是,不同的网站它对于数据访问的限制和反爬虫措施却是给企业的数据采集带来了挑战。针对这一问题,代理IP数据采集技术应运而生。但是使用代理ip来进行数据采集也有优缺点。 一、代理…

JS WEB框架Express日志模块winston和express-winston以及winston-daily-rotate-file优化

1.前言 1.Express的日志模块winston和express-winston已经提供了开箱即用的大多数功能,但是和其他语言相比,还缺失对日志记录的当前文件和行号的支持,需要自己实现,以此记录一下。 2.express-winston主要用于记录请求进入和结束时…

【运筹优化】ALNS自适应大领域搜索算法求解TSP问题 + Java代码实现

文章目录 一、TSP问题简介二、数学建模三、实现细节四、案例实战4.1 测试案例说明4.2 Java 完整代码4.2.1 TSP_Instance 实例类4.2.2 TSP_Solution 结果类4.2.3 TSP_Util 工具类4.2.4 TSP_Solver_ALNS 算法类4.2.5 RunAndPlot 运行类 4.3 运行结果展示 一、TSP问题简介 旅行推…

MySQL登录时报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘解决办法

问题描述 在云服务器使用 docker安装的Mysql5.7数据库,刚开始的时候使用正常,后面突然有一天就连接不上了,报错为: ERROR 1045 (28000): Access denied for user root1xxx(using password:YES), 当登录MySQL数据库出现 Error 1045…

python套接字(三):结合pyside2实现多人聊天室

文章目录 前言一、准备1、安装pyside22、设计界面 二、代码实现1、服务器端2、客户端 三、运行 前言 上一章python套接字(二):实现一个服务器和多客户端连接,大概实现了多人聊天室功能,但是比较简陋,本篇内容将结合pyside2做一个…

车间主任、班组长必读:生产车间的现场管理

与工厂车间操作层(一线员工)接触最多的基层管理者,即我们通常所说的班组长、车间主任等,他们是将企业战略规划落实到具体工作当中的终端管理者。 一线班组长的“角色” 1、责任者 对企业来说,班组长是基层的治理员&am…

MySQL高级篇第二天

文章目录 一、Mysql的体系结构概览 二、 存储引擎 三、优化SQL步骤 一、Mysql的体系结构概览 整个MySQL Server由以下组成 Connection Pool : 连接池组件 Management Services & Utilities : 管理服务和工具组件 SQL Interface : SQL接口组件 Parser : 查询分析器组件 O…

游戏测试与一般的软件测试的区别在哪里?

有很多同学进入测试行业之后,一直从事的是软件测试的工作,然后跳槽时遇到一些游戏的公司的面试,就会有点慌,我做的都是软件测试,能胜任游戏测试么? 所以,今天我们需要先来了解一下,…

科技政策 | 《深圳市加快加快推动人工智能高质量发展高水平应用行动方案(2023—2024年)》发布

原创 | 文 BFT机器人 导语 Introduction 近日,深圳市发布了《深圳市加快推动人工智能高质量发展高水平应用行动方案(2023-2024年)》旨在以更大热情拥抱创新,打造最好生态,推动人工智能高质量发展和全方位各领域高水平…

C语言-关键字

关键字就是c语言已经定义好的名字,直接可以拿过来使用,不需要再次定义 1 数据类型相关的关键字 用于定义变量或者类型 定义变量的语法结构: 类型 变量名; 拓展:变量名属于标识符,标识符(变量…

关于Axios发请求(get或post)的参数问题

版本说明: {"name": "wx_vue_3.0","version": "0.1.0","private": true,"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build"…

K-Means聚类算法

引言 聚类算法是传统机器学习算法中比较重要的一个算法,也是工程项目当中一个比较常用的算法。 一. 分类与聚类 分类 分类其实是从特定的数据中挖掘模式,作出判断的过程。 分类学习主要过程: (1)训练数据集存在一个类…

mathtype公式右编号对齐

mathtype公式右编号对齐 1.选中文中编辑好的公式,复制 2.mathtype里的点击右编号,将上面复制的公式粘贴到新出现的框内 3.编号设置

聚类效果评估

目录 1.轮廓系数(Silhouette Coefficient) 1.1 为什么轮廓系数可以评价聚类效果的好坏? 1.2 平均轮廓系数 2. 其他聚类质量函数 2.1方差比准则(Variance Ratio Criterion, VRC) 2.2 戴维斯-博尔丁指数(Davies-Bouldin指数,DB指数) 评价聚…

linux- 定时任务清理日志

定时任务清理日志 一、查找并删除文件1.1 查找文件1.2 查找并删除 二、计划任务:2.1 创建shell脚本,并分配权限2.2 编辑shell脚本2.3 计划任务 linux是一个很能自动产生文件的系统,在实际部署运行中,发现日志文件会占用大量内存&a…