Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

这篇具有很好参考价值的文章主要介绍了Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「网易云课堂」:传送门
😈「CSDN学院」:传送门
😈「51CTO学院」:传送门
😈「本文的内容」:Qt布局指南
😈「动动你的小手」点赞👍收藏⭐️评论📝

1.布局简介

界面开发首先要对整个界面进行布局,使窗体上的所有的控件必须有一个合适的尺寸和位置。那么做出来的界面才看起来美观。

2.常用布局方法

2.1绝对位置定位

说明:控件布局是固定位置,没有自适应功能,只能固定窗口大小。

优点:简单

缺点:没法自适应,一拉就变形,窗口要固定大小。

QWidget *pWidget = new QWidget;
QLabel label(pWidget);
label.setText("姓名");
label.setGeometry(10,10,20,20);

QLineEdit namedLineEdit("小王",pWidget);
namedLineEdit.setGeometry(35,10,50,20);
QPushButton *btn = new QPushButton("关闭",pWidget);
btn->setGeometry(90,10,40,20);

效果图:
Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

2.2手动布局

说明:给出控件的绝对位置,但是他们的尺寸根据窗口的大小确定,可以通过重写窗体控件的resizeEvent()实现对子控件的大小和位置

优点:简单,灵活

缺点:虽然可以自适应,要写大量自适应的代码,很难受。

2.3布局管理器

说明:给出控件的绝对位置,但是他们的尺寸根据窗口的大小确定,可以通过重写窗体控件的resizeEvent()实现对子控件的大小和位置

优点:简单,灵活,高效,能满足你百分之99的需求

缺点:有点难,布局管理器入门有一定难度

布局管理器继承于QLayout,并非QWidght。QLayout的能力是收容QWidget,是QWidget的容器。

2.4.1水平布局类QHBoxLayout

包含的对象都横向排列开

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

2.4.2垂直布局类QVBoxLayout

包含的对象都垂直排列开

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

2.4.3网格布局类QGridLayout

将控件放置到网格中布局,它本身会从父窗口或父布局中占据尽可能多的界面空间,然后把自己的空间划分为行和列,再把每个控件塞到设置好的一个或多个单元格中。通常情况下 QGridLayout不需要自己添加空白条 QSpacerItem,因为其他功能控件把各自的单元格占据之后,剩下没控件占据的单元格自然就是空的,空的格子默认里面什么都没有,也没有空白条。

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

2.4.4表格布局类QFormLayout

专门用于管理输入控件和与之相关的标签等表单布局,QFormLayout固定为两列布局,并针对表单做了建模,配套了一堆方便使用的函数。网格布局器的基本单元是单元格,而表单布局器的基本单元是行。表单布局器是高度建模并封装的,它没有 addWidget()和 addLayout()之类的函数,它只有addRow()函数。表单布局器中一行的空间可以由多个控件占据,也可以由一个控件占据。

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

2.4.5分组布局类QStackLayout

把子控件进行分组或者分页,一次只显示一组或者一页,隐藏其他组或者页上的控件

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

2.4.6QSpliter分割器

拆分器允许用户通过拖动它们之间的边界来控制子小部件的大小。任何数量的小部件都可以由单个拆分器控制。 也就是可以拖动控件的大小。

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

2.4.7 弹簧

弹簧的功能主要是站位,我在一个垂直布局中,想让一个按钮在最下面,我们就可以用弹簧实现。

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

3.QWidget大小策略

基本上所有控件都继承于QWidget吧,这些属性是通用的

常量 描述
QSizePolicy::Fixed 只能使用sizeHint()提供的值,无法伸缩
QSizePolicy::Minimum siziHint()提供的大小是最小的,部件可以被拉伸
QSizePolicy::Maximum sizeHint()提供的是最大大小,部件可以被压缩
QSizePolicy::Preferred sizeHint()提供的大小是最佳大小,可以拉伸可以压缩
QSizePolicy::Expanding izeHint()提供的是合适的大小,部件可以被压缩,不过更倾向于拉伸来获得更多的空间
QSizePolicy::MinimumExpanding sizeHint()提供的大小是最小的,部件倾向于被拉伸来获取更多的空间
QSizePolicy::Ignored sizeHint()的值被忽略,部件将尽可能的被拉伸来获取更多的空间

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

4.QLayout大小策略

所有的布局管理器类都继承于Lauout,所以都带下面的属性

属性 说明
layoutName 现在所使用的布局管理器的名称
layoutLeftMargin 设置布局管理器到界面左边界的距离
layoutTopMargin 设置布局管理器到界面上边界的距离
layoutRightMargin 右边界
layoutBottomMargin 下 边界
layoutSpacing 布局管理器各个子部件间的距离
layoutStretch 伸缩因子
layoutSizeConstraint 设置大小约束条件

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

5.Layout核心API

5.1继承关系

QHBoxLayout和QVBoxLayout API没什么介绍的,因为都是QBoxLayout来实现的。所有API都写,我就累死了。所以我就画重点

5.2QBoxLayout

//添加一个带有缩放因子的layout
void	addLayout(QLayout *layout, int stretch = 0)
//添加一个separatorItem
void	addSpacerItem(QSpacerItem *spacerItem)
//将大小为size的不可拉伸空间(一个QSpacerItem)添加到此框布局的末尾。
//QBoxLayout提供默认的边距和间距。此功能增加了额外的空间。
void	addSpacing(int size)
//添加一个可拉伸空间
void	addStretch(int stretch = 0)
//将框限制为size大小
void	addStrut(int size)
//添加widget
void	addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
//获取方向
QBoxLayout::Direction	direction() const
//插入小部件相关
void	insertItem(int index, QLayoutItem *item)
void	insertLayout(int index, QLayout *layout, int stretch = 0)
void	insertSpacerItem(int index, QSpacerItem *spacerItem)
void	insertSpacing(int index, int size)
void	insertStretch(int index, int stretch = 0)
void	insertWidget(int index, QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
//设置方向
void	setDirection(QBoxLayout::Direction direction)
//设置拉伸因子相关
void	setStretch(int index, int stretch)
bool	setStretchFactor(QWidget *widget, int stretch)
bool	setStretchFactor(QLayout *layout, int stretch)
//获取拉伸因子
int	stretch(int index) const

5.3QGridLayout

//添加Item
void addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())
//添加Layout
void addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
//添加Widget
void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
//行和列的大小
QRect cellRect(int row, int column) const
//列个数
int columnCount() const
//列最小宽度
int columnMinimumWidth(int column) const
//列缩放因子
int columnStretch(int column) const
//通过索引获取item
void getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const
//水平间距
int horizontalSpacing() const

//获取第几行第几列的元素
QLayoutItem *itemAtPosition(int row, int column) const 
//获取网格的原点角
Qt::Corner originCorner() const
//行数量
int rowCount() const
//行最小高度
int rowMinimumHeight(int row) const
//获取行的缩放因子
int rowStretch(int row) const
//设置列的最小宽度
void setColumnMinimumWidth(int column, int minSize)
//设置垂直的缩放因子
void setColumnStretch(int column, int stretch)
//设置水平间距
void setHorizontalSpacing(int spacing)
//将网格的原点角,即位置 (0, 0) 设置为角。
void setOriginCorner(Qt::Corner corner)
//设置某一行最小高度
void setRowMinimumHeight(int row, int minSize)
//设置行所占总行的比例
void setRowStretch(int row, int stretch)
//设置垂直间距
void setVerticalSpacing(int spacing)
//垂直间距
int verticalSpacing() const

6.Qt界面设计师技巧

6.1栅格化布局(表格布局)

如图操作,这么
操作会给QFrame直接带上一个QLayout,让QLayout包裹中QFram。

自动调用gridLayout-> addWidget。
那么创建的QGridLayout会自动给一个centralwidget的父类。

//自动生成如下代码,但是在布局管理器,你只能在QFrame下挂着这个QGridLayout。
gridLayout = new QGridLayout(frame);
pushButton = new QPushButton(frame);
gridLayout->addWidget(pushButton, 0, 0, 1, 1);

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

6.2巧用比例

QGridLayout的核心吧,就是比例
Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)

6.3巧用弹簧

按钮都在左边

Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)文章来源地址https://www.toymoban.com/news/detail-417234.html

到了这里,关于Qt入门教程【Core篇】Layout布局(布局管理器、手动布局)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt6入门教程 6:Qt元对象系统

    目录 一.什么是Qt元对象系统? 二.编译时Qt Creator偷摸做了哪些事情? 1.uic 2.rcc 3.moc Qt中的元对象系统(Meta-Object System)提供了对象间通信的信号和槽机制、运行时类型信息和动态属性系统。元对象系统是基于以下3个条件的: ●该类必须继承自QObject类; ●必须在类的私有声

    2024年01月18日
    浏览(41)
  • Python Qt5 入门教程

    Python Qt5是一个强大的GUI工具包,可以用来设计各种桌面应用程序,包括图形用户界面、数据库应用程序等。本教程将带你入门Python Qt5,从安装开始到图形界面的设计以及常见的控件和事件。 Python Qt5需要使用PyQt5库,首先需要安装PyQt5库。在使用pip命令安装之前,需要先确保

    2023年04月15日
    浏览(25)
  • Qt6入门教程 4:Qt Creator常用技巧

    在上一篇Qt6入门教程 3:创建Hello World项目中,通过创建一个Qt项目,对Qt Creator已经有了比较直观的认识,本文将介绍它的一些常用技巧。 Qt Creator启动后默认显示欢迎页面 创建项目已经用过了,打开项目也很简单,就是打开一个已经存在的项目。 项目历史记录非常有用,能

    2024年02月03日
    浏览(36)
  • [ PyQt入门教程 ] Qt Designer工具的使用

    Qt Designer是PyQt程序UI界面的实现工具,使用Qt Designer可以拖拽、点击完成GUI界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。   1、Qt Designer程序主界面窗口介绍。   2、Qt Designer程序实现界

    2024年01月17日
    浏览(47)
  • 【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境

    QT 是一个跨平台的应用程序开发框架,它提供了丰富的工具和类库,用于开发图形用户界面(GUI)程序。Qt 提供了 C++ 编程语言接口,同时也支持其他编程语言,如 Python和QML。 以下是 QT 的一些主要特点: 跨平台:Qt 支持在多个操作系统上进行开发,包括 Windows、macOS、Linux、

    2024年01月17日
    浏览(48)
  • 【CocosCreator入门】CocosCreator组件 | Layout(布局)组件

            Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中的Layout组件是一种用于实现节点自适应布局的重要组件。它可以根据不同的布局方式,自动调整子节点的位置和大小,从而实现节点的自适应布局。 目录 一、组件介绍 二、组件属性 三、布局类

    2023年04月22日
    浏览(32)
  • Qt6入门教程 8:信号和槽机制(连接方式)

    目录 一.一个信号与槽连接的例子 二.第五个参数 1.Qt::AutoConnection 2.Qt::DirectConnection 3.Qt::QueuedConnection 4.Qt::BlockingQueuedConnection 5.Qt::UniqueConnection 三.信号 四.connect函数原型 五.信号与槽的多种用法 六.槽的属性 在调用a.setValue(12)时会发送valueChanged(12)信号,此时槽函数b.setValue(12)会

    2024年01月17日
    浏览(44)
  • Qt6入门教程 10:菜单栏、工具栏和状态栏

    目录 一.菜单栏 1.Qt Designer 1.1添加菜单和菜单项 1.2添加二级菜单 1.3给菜单和菜单项添加图标 1.4给菜单项添加功能 2.纯手写 二.工具栏 1.Qt Designer 1.1添加工具栏按钮 1.2工具栏的几个重要属性 2.纯手写 三.状态栏 1.Qt Designer 2.纯手写 用Qt Creator新建基于QMainWindow的项目时,会自带菜

    2024年02月19日
    浏览(35)
  • 界面开发框架Qt新手入门教程:Dir视图使用实例

    Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 点击获取Qt Widget组件下载 本示例演示了树形视图的用

    2024年02月08日
    浏览(30)
  • 界面开发框架Qt新手入门教程 - 可编辑树模型的示例(一)

    Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 点击获取Qt Widget组件下载 (Q技术交流:166830288) 树项

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包