目录

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(表格布局)详细使用说明相关推荐

  1. unix命令的一般格式是_Linux tree 命令详细使用说明

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解Linux系统上的tree命令的详细使用方 ...

  2. android表格布局的使用方法,Android布局(RelativeLayout、TableLayout等)使用方法

    本文介绍 Android 界面开发中最基本的四种布局LinearLayout.RelativeLayout.FrameLayout.TableLayout 的使用方法及这四种布局中常用的属性.Line ...

  3. Android 应用开发(38)TableLayout(表格布局)

    TableLayout(表格布局) 前面我们已经学习了平时实际开发中用得较多的线性布局(LinearLayout)与相对布局(RelativeLayout), 其实学完这两个基本就够用了,笔者在实际开 ...

  4. Android用表格布局做菜单栏,Android开发菜单布局之表格布局示例

    本文实例讲述了android开发菜单布局之表格布局.分享给大家供大家参考,具体如下: 多用于静态菜单页面 xml代码 代码内带详细解释 xmlns:android="http://schem ...

  5. 【Pandas入门教程】如何重塑表格布局

    如何重塑表格布局 来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管: ...

  6. html中表格布局还是div布局,表格布局和css div布局

    请简单说明表格布局网页和DIV+CSS布局网页的不同之处? 请简单说明表格布局网页和DIV+CSS布局网页的不同之处? div+css布局和表格框架式布局的优缺点各是什么?如题,越详细越好 TABLE ...

  7. Android基础入门教程——2.2.3 TableLayout(表格布局)

    Android基础入门教程--2.2.3 TableLayout(表格布局) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们已经学习了平时实际开发中用得较多的线性布局(Linea ...

  8. 安卓app开发-05-Android xml布局详细介绍

    安卓app开发-05-Android xml布局详细介绍 虽然说有 墨刀,墨客 这些图形化开发工具来做 Android 的界面设计,但是我们还是离不开要去学习做安卓原生app,学习 xml 布局还是必 ...

  9. 微信小程序之获取后台动态数据表格布局display:table

    微信小程序之获取后台动态数据表格布局display:table 猿来独往 2018-09-02 本文没有采用flex布局和grid布局来设置表格的,而是通过 display: table;来设置. 一 ...

最新文章

  1. java8的jvm优化_基于JDK8 版本的SpringBoot 启动参数优化(建议收藏)
  2. 亚马逊AWS:正确设置FTP
  3. JS中常遇到的浏览器兼容问题和解决方法
  4. JSON数据格式必知
  5. 几种简单的排序算法(JAVA)
  6. 微软宣布新命令行工具 Windows Terminal 和 WSL2
  7. 1286:怪盗基德的滑翔翼(错)
  8. 一叶知秋:“安全“的野指针、 static函数、成员函数、this 指针、gcc编译器、name mangling
  9. C#笔记16 多线程和同步
  10. MFC编程——Where is WinMain?
  11. macos server 恢复安装_Sinter:一款针对macOS的用户模式应用程序授权系统
  12. putty screen 快捷键
  13. java加按钮_剪辑大神都在用的加字幕神器,你知道嘛!
  14. ImportError: Missing required dependencies [‘pytz‘]
  15. Pandas数据分析教程(2)-数据读取之普通索引、loc/iloc索引
  16. SDH与SONET(整理)
  17. 操作系统【清华慕课笔记】
  18. linux串口工具 kermit,ubuntu串口工具(minicom、kermit)的使用
  19. Spring Security和Angular教程
  20. 表格里面如何根据身份证号提取出生日期

热门文章

  1. couple和double的区别_DC couple与AC couple的区别? couple与pair的区别
  2. 【Java--日期的使用】
  3. C++ 使用Windows API 打开VSPD虚拟串口失败
  4. HTS Sinsy音源库训练方法
  5. win10c语言乱码修复方法,软件乱码 教你win10系统打开软件乱码的修复技巧
  6. 台式计算机软件打不开,电脑打开软件显示乱码的解决方法 电脑点击软件没反应怎么办...
  7. 易飞软件乱码显示不正常
  8. WWDC21主题演讲6 月 8 日凌晨1点开幕
  9. TensorFlow 中的 LRNOp
  10. 论随机数AC大法(1)