QGridLayout(表格布局)详细使用说明
目录
1.概述
2.图解表格布局中的常用术语和概念
2.1 表格布局有哪些属性
2.2 Margin(边距)
2.3 Spacing(间隔)
2.4 Strech(纵向和横向拉伸系数)
2.5 最小行高与最小列宽
2.6 SizeConstraint(尺寸控制模式)
3.基础用法
3.1 使用Qt设计师创建布局
3.2 使用代码创建布局
GridLayoutTest.h
GridLayoutTest.cpp
3.3 在指定的行和列中添加控件
3.4 在表格布局内部再嵌套布局
3.5 设置常见属性
3.6 设置尺寸控制模式
3.7 设置表格坐标原点
1.概述
QGridLayout类在网格中布局小部件。
QGridLayout获取可用空间(通过其父布局或parentWidget()),将其划分为行和列,并将其管理的每个小部件放入正确的单元格中。
每列都有一个最小宽度和一个拉伸系数。最小宽度是使用setColumnMinimumWidth()设置的。拉伸因子是使用setColumnStretch()设置的,它决定了该列将获得多少可用空间,以及超过其必要的最小值。
通常,使用addWidget()将每个托管小部件或布局放入自己的单元格中。小部件也可以使用addItem()和addWidget()的跨行和跨列重载来占用多个单元格。如果这样做,QGridLayout将猜测如何在列/行上分布大小(基于拉伸系数)。
要从布局中删除小部件,请调用removeWidget()。在小部件上调用QWidget::hide()也可以有效地从布局中删除小部件,直到调用QWidget::show()。
此图显示了一个带有五列三行网格的对话框片段(网格以洋红色重叠显示):
这个对话框片段中的第0、2和4列由QLabel、QLineEdit和QListBox组成。列1和3是由setColumnMinimumWidth()生成的占位符。第0行包含三个QLabel对象,第1行包含三个QLineEdit对象,第2行包含三个QListBox对象。我们使用占位符列(1和3)来获得列之间适当的空间。
请注意,列和行不是同样宽或同样高。如果希望两列具有相同的宽度,则必须将它们的最小宽度和拉伸因子设置为相同。可以使用setColumnMinimumWidth()和setColumnStretch()来实现。
如果QGridLayout不是顶级布局(即不管理所有小部件的区域和子部件),你必须在创建它时将它添加到其父布局中,但在你对它做任何事情之前。添加布局的通常方法是在父布局上调用addLayout()。一旦添加了布局,就可以开始使用addWidget()、addItem()和addLayout()将小部件和其他布局放入网格布局的单元格中。
QGridLayout还包括两个边距:内容边距和spacing()。内容边距是QGridLayout四个边中每个边的预留空间的宽度。spacing()是相邻框之间自动分配的间距的宽度。
默认的内容边距值由样式提供。Qt样式指定的默认值是子小部件9,窗口11。间距默认为与顶级布局的边距宽度相同,或与父布局相同。
2.图解表格布局中的常用术语和概念
2.1 表格布局有哪些属性
为了方便描述,此节均以Qt设计师的截图来说明,下图展示了Qt设计师提供的可编辑的属性。
2.2 Margin(边距)
2.3 Spacing(间隔)
2.4 Strech(纵向和横向拉伸系数)
2.5 最小行高与最小列宽
2.6 SizeConstraint(尺寸控制模式)
3.基础用法
3.1 使用Qt设计师创建布局
3.2 使用代码创建布局
GridLayoutTest.h
#pragma once#include <QtWidgets/QMainWindow>
#include "ui_GridLayoutTest.h"
#include "QGridLayout"class GridLayoutTest : public QMainWindow
{Q_OBJECTpublic:GridLayoutTest(QWidget *parent = Q_NULLPTR);private:Ui::GridLayoutTestClass ui;QGridLayout *m_pLayout;
};
GridLayoutTest.cpp
#include "GridLayoutTest.h"
#include "QPushButton"GridLayoutTest::GridLayoutTest(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);m_pLayout = new QGridLayout;ui.centralWidget->setLayout(m_pLayout);QPushButton *btn1 = new QPushButton("btn1");QPushButton *btn2 = new QPushButton("btn2");QPushButton *btn3 = new QPushButton("btn3");QPushButton *btn4 = new QPushButton("btn4");QPushButton *btn5 = new QPushButton("btn5");m_pLayout->addWidget(btn1);m_pLayout->addWidget(btn2);m_pLayout->addWidget(btn3);m_pLayout->addWidget(btn4);m_pLayout->addWidget(btn5);
}
3.3 在指定的行和列中添加控件
3.2节中的代码没有指定行和列,所以显示效果看起来不像是表格,反而像是垂直布局,下面来看一下如何指定行和列。
m_pLayout->addWidget(btn1,0,0);//添加到(第0行,第0列)m_pLayout->addWidget(btn2,0,1);//添加到(第0行,第1列)m_pLayout->addWidget(btn3,0,2);//添加到(第0行,第2列)m_pLayout->addWidget(btn4,1,0);//添加到(第1行,第0列)m_pLayout->addWidget(btn5,1,1);//添加到(第1行,第1列)
3.4 在表格布局内部再嵌套布局
QPushButton *btn1 = new QPushButton("btn1");QPushButton *btn2 = new QPushButton("btn2");QPushButton *btn3 = new QPushButton("btn3");QPushButton *btn4 = new QPushButton("btn4");QPushButton *btn5 = new QPushButton("btn5");//在表格布局内部再嵌套布局QTextEdit *pEdit = new QTextEdit;QVBoxLayout *pVLayout = new QVBoxLayout;pVLayout->addWidget(btn1);pVLayout->addWidget(pEdit);m_pLayout->addLayout(pVLayout,0,0);m_pLayout->addWidget(btn2,0,1);//添加到(第0行,第1列)m_pLayout->addWidget(btn3,0,2);//添加到(第0行,第2列)m_pLayout->addWidget(btn4,1,0);//添加到(第1行,第0列)m_pLayout->addWidget(btn5,1,1);//添加到(第1行,第1列)
可以看到在第一列第一行中,btn1和pEdit是垂直布局的。
3.5 设置常见属性
//设置最小列宽
void setColumnMinimumWidth(int column, int minSize)
//设置最小行高
void setRowMinimumHeight(int row, int minSize)
//设置每一列的列宽比例
void setColumnStretch(int column, int stretch)
//设置每一行的行高比例
void setRowStretch(int row, int stretch)
//设置水平方向各控件的间隔
void setHorizontalSpacing(int spacing)
//同时设置设置水平方向和垂直方向上各控件的间隔
void setSpacing(int spacing)
//设置垂直方向各控件的间隔
void setVerticalSpacing(int spacing)
3.6 设置尺寸控制模式
通过如下函数设置:
void setSizeConstraint(SizeConstraint)
其参数有如下可选值:
Constant | Value | Description |
QLayout::SetDefaultConstraint | 0 | 主小部件的最小尺寸被设置为minimumSize(),除非小部件已经有了最小尺寸。 |
QLayout::SetFixedSize | 3 | 主部件的尺寸被设置为sizeHint();它根本无法调整尺寸。 |
QLayout::SetMinimumSize | 2 | 主部件的最小尺寸设置为minimumSize();不能再小了。 |
QLayout::SetMaximumSize | 4 | 主部件的最大尺寸设置为maximumSize();不能再大了。 |
QLayout::SetMinAndMaxSize | 5 | 主小部件的最小尺寸设置为minimumSize(),最大尺寸设置为maximumSize()。 |
QLayout::SetNoConstraint | 1 | 小部件不受约束。 |
3.7 设置表格坐标原点
通过如下函数设置:
void setOriginCorner(Qt::Corner corner)
其参数有如下可选值:
Constant | Value | Description |
Qt::TopLeftCorner | 0x00000 | 以矩形的左上角为原点。 |
Qt::TopRightCorner | 0x00001 | 以矩形的右上角为原点。 |
Qt::BottomLeftCorner | 0x00002 | 以矩形的左下角为原点。 |
Qt::BottomRightCorner | 0x00003 | 以矩形的右下角为原点。 |
QGridLayout(表格布局)详细使用说明相关推荐
- unix命令的一般格式是_Linux tree 命令详细使用说明
请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解Linux系统上的tree命令的详细使用方 ...
- android表格布局的使用方法,Android布局(RelativeLayout、TableLayout等)使用方法
本文介绍 Android 界面开发中最基本的四种布局LinearLayout.RelativeLayout.FrameLayout.TableLayout 的使用方法及这四种布局中常用的属性.Line ...
- Android 应用开发(38)TableLayout(表格布局)
TableLayout(表格布局) 前面我们已经学习了平时实际开发中用得较多的线性布局(LinearLayout)与相对布局(RelativeLayout), 其实学完这两个基本就够用了,笔者在实际开 ...
- Android用表格布局做菜单栏,Android开发菜单布局之表格布局示例
本文实例讲述了android开发菜单布局之表格布局.分享给大家供大家参考,具体如下: 多用于静态菜单页面 xml代码 代码内带详细解释 xmlns:android="http://schem ...
- 【Pandas入门教程】如何重塑表格布局
如何重塑表格布局 来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管: ...
- html中表格布局还是div布局,表格布局和css div布局
请简单说明表格布局网页和DIV+CSS布局网页的不同之处? 请简单说明表格布局网页和DIV+CSS布局网页的不同之处? div+css布局和表格框架式布局的优缺点各是什么?如题,越详细越好 TABLE ...
- Android基础入门教程——2.2.3 TableLayout(表格布局)
Android基础入门教程--2.2.3 TableLayout(表格布局) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们已经学习了平时实际开发中用得较多的线性布局(Linea ...
- 安卓app开发-05-Android xml布局详细介绍
安卓app开发-05-Android xml布局详细介绍 虽然说有 墨刀,墨客 这些图形化开发工具来做 Android 的界面设计,但是我们还是离不开要去学习做安卓原生app,学习 xml 布局还是必 ...
- 微信小程序之获取后台动态数据表格布局display:table
微信小程序之获取后台动态数据表格布局display:table 猿来独往 2018-09-02 本文没有采用flex布局和grid布局来设置表格的,而是通过 display: table;来设置. 一 ...
最新文章
- java8的jvm优化_基于JDK8 版本的SpringBoot 启动参数优化(建议收藏)
- 亚马逊AWS:正确设置FTP
- JS中常遇到的浏览器兼容问题和解决方法
- JSON数据格式必知
- 几种简单的排序算法(JAVA)
- 微软宣布新命令行工具 Windows Terminal 和 WSL2
- 1286:怪盗基德的滑翔翼(错)
- 一叶知秋:“安全“的野指针、 static函数、成员函数、this 指针、gcc编译器、name mangling
- C#笔记16 多线程和同步
- MFC编程——Where is WinMain?
- macos server 恢复安装_Sinter:一款针对macOS的用户模式应用程序授权系统
- putty screen 快捷键
- java加按钮_剪辑大神都在用的加字幕神器,你知道嘛!
- ImportError: Missing required dependencies [‘pytz‘]
- Pandas数据分析教程(2)-数据读取之普通索引、loc/iloc索引
- SDH与SONET(整理)
- 操作系统【清华慕课笔记】
- linux串口工具 kermit,ubuntu串口工具(minicom、kermit)的使用
- Spring Security和Angular教程
- 表格里面如何根据身份证号提取出生日期
热门文章
- couple和double的区别_DC couple与AC couple的区别? couple与pair的区别
- 【Java--日期的使用】
- C++ 使用Windows API 打开VSPD虚拟串口失败
- HTS Sinsy音源库训练方法
- win10c语言乱码修复方法,软件乱码 教你win10系统打开软件乱码的修复技巧
- 台式计算机软件打不开,电脑打开软件显示乱码的解决方法 电脑点击软件没反应怎么办...
- 易飞软件乱码显示不正常
- WWDC21主题演讲6 月 8 日凌晨1点开幕
- TensorFlow 中的 LRNOp
- 论随机数AC大法(1)