[Qt 教程之Widgets模块] —— QFormLayout表单布局

news/2024/5/19 10:54:45/文章来源:https://blog.csdn.net/maizousidemao/article/details/129890476

Qt系列教程总目录

文章目录

  • 一、创建QFormLayout
  • 二、成员函数
    • 2.1. 对行操作
    • 2.2. 操作布局项
    • 2.3. 间距
    • 2.4. 设置布局规则
    • 2.5. 对齐方式

表单布局 QFormLayout 以两列形式布局其子项。左列由标签组成,右列由小部件(行编辑器、数字调整框等)组成。

如下图,有两列布局,左侧为标签,右侧为行编辑框或下拉列表,就可以用QFormLayout实现。

在这里插入图片描述

一、创建QFormLayout

QGridLayout一样,QFormLayout也只有一个构造函数:

explicit QFormLayout(QWidget *parent = nullptr);

可以通过拖动控件创建,也可以使用代码直接创建。

由于布局是默认铺满父级Widget的,为了方便控制布局的整体大小,一般不是将最外层的Widget窗口传给QFormLayout,而是再新建一个Widget,如下:

// 创建指针
QWidget *formLayoutWidget;
QFormLayout *formLayout;// 创建新Widget
formLayoutWidget = new QWidget(Widget);
// 为新Widget设置大小
formLayoutWidget->setGeometry(QRect(60, 60, 531, 291));
// 实例化布局对象,并将新Widget传入
formLayout = new QFormLayout(formLayoutWidget);

二、成员函数

2.1. 对行操作

对于表单布局,可以以行为单位作为一个成员,并对其进行操作。

a. 添加行:

void addRow(QWidget *label, QWidget *field); // 使用指定的标签和小部件在表单末尾添加一行
void addRow(QWidget *label, QLayout *field);
void addRow(const QString &labelText, QWidget *field);
void addRow(const QString &labelText, QLayout *field);
void addRow(QWidget *widget); // 直接在表单末尾添加小部件,此时小部件占两列
void addRow(QLayout *layout);

b. 插入行:

参数同addRow,不同的是可以通过row指定新行的位置。

void insertRow(int row, QWidget *label, QWidget *field);
void insertRow(int row, QWidget *label, QLayout *field);
void insertRow(int row, const QString &labelText, QWidget *field);
void insertRow(int row, const QString &labelText, QLayout *field);
void insertRow(int row, QWidget *widget);
void insertRow(int row, QLayout *layout);

c. 删除行:

删除行的同时删除该行所有小部件及嵌套布局,所有后续行都向上移动一行。

void removeRow(int row); // 指定行索引
void removeRow(QWidget *widget); // 指定行小部件对象
void removeRow(QLayout *layout); // 指定行布局对象

只从布局中删除行,不删除小部件,其余同removeRow

TakeRowResult takeRow(int row);
TakeRowResult takeRow(QWidget *widget);
TakeRowResult takeRow(QLayout *layout);

2.2. 操作布局项

当然也可以操作每一个子项,如下:

a. 将给定行的布局项设置为itemwidgetlayout

void setItem(int row, ItemRole role, QLayoutItem *item);
void setWidget(int row, ItemRole role, QWidget *widget);
void setLayout(int row, ItemRole role, QLayout *layout);

请勿使用setItem()添加子布局或子小部件项目,请使用 setLayout()setWidget()

其中布局项通过role指定,ItemRole是一个枚举:

enum ItemRole {LabelRole = 0,FieldRole = 1,SpanningRole = 2
};

描述如下:

常量描述
QFormLayout::LabelRole0左列的标签项
QFormLayout::FieldRole1右列的小部件
QFormLayout::SpanningRole2横跨左右两列

示例如下:

在这里插入图片描述

b. 获取itemwidgetlayout的位置

void getItemPosition(int index, int *rowPtr, ItemRole *rolePtr) const;
void getWidgetPosition(QWidget *widget, int *rowPtr, ItemRole *rolePtr) const;
void getLayoutPosition(QLayout *layout, int *rowPtr, ItemRole *rolePtr) const;

通过给定的indexwidgetlayout获取项所在的行(*rowPtr)和列(*rolePtr),如果给定的项不存在,则*rowPtr-1*rolePtr保持原来的值不变,其中index是布局项在队列中的索引(从0开始)。

c. 获取右列小部件对应的label对象

QWidget *labelForField(QWidget *field) const;
QWidget *labelForField(QLayout *field) const;

d. 通过索引与位置访问布局项

QLayoutItem *itemAt(int row, ItemRole role) const;
// reimplemented from QLayout
QLayoutItem *itemAt(int index) const override;

e. 添加/删除布局项

// reimplemented from QLayout
void addItem(QLayoutItem *item) override;
QLayoutItem *takeAt(int index) override;

2.3. 间距

void setHorizontalSpacing(int spacing);	// 设置水平间距
int horizontalSpacing() const;			// 获取水平间距void setVerticalSpacing(int spacing);   // 设置垂直间距
int verticalSpacing() const;     		// 获取垂直间距void setSpacing(int) override;  // 同时设置水平和垂直间距
int spacing() const override;	// 同时获取水平和垂直间距(若水平和垂直间距不相等,则返回-1)

2.4. 设置布局规则

void setFieldGrowthPolicy(FieldGrowthPolicy policy);
FieldGrowthPolicy fieldGrowthPolicy() const;
void setRowWrapPolicy(RowWrapPolicy policy);
RowWrapPolicy rowWrapPolicy() const;

其中FieldGrowthPolicy定义右列小部件的布局规则,枚举如下:

enum FieldGrowthPolicy {FieldsStayAtSizeHint,ExpandingFieldsGrow,AllNonFixedFieldsGrow
};

描述如下:

常量描述
QFormLayout::FieldsStayAtSizeHint0大小永远不会超出其有效大小提示(QWidgetItem::sizeHint())
QFormLayout::ExpandingFieldsGrow1小部件的水平大小策略为 Expanding 或 MinimumExpanding 时,其被拉伸以填充可用空间。其他小部件不会超出其有效大小提示。
QFormLayout::AllNonFixedFieldsGrow2只要小部件的大小策略允许拉伸,都将被拉伸以填充可用空间。 这是大多数样式的默认策略。

RowWrapPolicy定义换行策略,枚举如下:

enum RowWrapPolicy {DontWrapRows,WrapLongRows,WrapAllRows
};

描述如下:

常量描述
QFormLayout::DontWrapRows0右列小部件总是排列在对应的标签旁边
QFormLayout::WrapLongRows1空间优先分配给标签,其余的空间被分配给右列小部件。 如果最小的小部件的大小大于可用空间,则该小部件将换行到下一行。
QFormLayout::WrapAllRows2右列小部件总是排列在对应的标签下方

2.5. 对齐方式

void setLabelAlignment(Qt::Alignment alignment); // 设置标签列的水平对齐方式
Qt::Alignment labelAlignment() const;
void setFormAlignment(Qt::Alignment alignment); // 设置布局的对齐方式
Qt::Alignment formAlignment() const;

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

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

相关文章

FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

目录1、前言2、目前我这里已有的图像处理方案3、暗通道先验算法介绍4、本图像去雾模块的优缺点5、vivado工程详解vivado工程1详解vivado工程2详解6、上板调试验证7、福利:工程源码获取1、前言 本文详细描述了FPGA实现图像去雾的实现设计方案,采用暗通道…

C++文件加密篇(基于char数组进行可逆加密)

严格意义上的加密算法有对称加密算法和非对称加密算法,对称加密算法是指加密与解密的key相同,而非对称加密算法是指加密(使用公钥,所有人都可以获取)与解密(使用私钥,只有指定方有私钥&#xff…

Robosense激光雷达Linux配置

文章目录1.1 速腾rs16连接:1.2 网络配置1)官方说明2)设置网络3)检查是否连接成功2.1 激光雷达ROS包下载/编译1)下载ROS包2)安装libpcap依赖3)修改编译模式4)config文件配置5)编译并运…

【数据结构与算法】一、数据结构的基本概念

文章目录一、数据结构的基本概念1.1 数据结构的研究内容1.2 数据类型和抽象数据类型1.3 算法和算法分析1.3.1 算法的时间复杂度1.3.2 算法时间效率的比较1.4 知识回顾一、数据结构的基本概念 1.1 数据结构的研究内容 1.2 数据类型和抽象数据类型 抽象数据类型(ADT…

[入门必看]数据结构4.1:串的定义和实现

[入门必看]数据结构4.1:串的定义和实现第四章 串4.1 串的定义和实现知识总览4.1.1_串的定义和基本操作4.1.2_串的存储结构4.1.1_串的定义和基本操作串的定义串 V.S 线性表串的基本操作串的比较操作字符集编码4.1.2_串的存储结构串的顺序存储串的链式存储基本操作的实…

4月9日第壹简报,星期日,农历闰二月十九

4月9日第壹简报,星期日,农历闰二月十九坚持阅读,静待花开1. “2023中国品牌女性500强”榜单揭晓,屠呦呦、张桂梅、董明珠、刘洋、孟晚舟、谷爱凌等入选。2. 京东集团副总裁:将在今年发布“京东版”ChatGPT。3. 以冒名顶…

大数据Flink进阶(十八):Flink执行图和TaskSlot问题思考

文章目录 Flink执行图和TaskSlot问题思考 一、Flink执行图 二、TaskSlot问题思考 Flink执行图和TaskSlot问题思考 一、Flink执行图 Flink代码提交到集群执行时最终会被转换成task分布式的在各个节点上运行,在前面我们学习到DataFlow数据流图

智能座舱操作系统|Flyme Auto-魅族 Flyme Auto“上车”领克08,能帮助吉利汽车打赢智能座舱战吗

“没有手机软件赋能的汽车厂商都将逐渐掉队。” 3月30日晚,星际魅族集团董事长兼首席执行官沈子瑜在魅族领克无界生态发布会上直言,魅族Flyme Auto车机操作系统要让手机成为汽车的一部分,成为定义传统汽车五个域之外的第六域——手机域。 魅族Flyme Auto已经预热多时且备受…

什么是服务架构?微服务架构的优势又是什么?

文章目录1.1 单体架构1.2 微服务架构1.3 单体架构和微服务架构的区分1.4 两种服务架构的优劣点1.4.1 单体架构1.4.2 微服务架构1.5 总结1.1 单体架构 单体架构(Monolithic Architecture)是一种传统的应用程序架构模式,它指的是将一个应用程序…

Android 11.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(二)

1.前言 在11.0的系统rom定制化开发中,在原生系统SystemUI下拉状态栏的下拉通知栏的背景默认是白色四角的背景, 由于在产品设计中,在对下拉通知栏通知的背景需要把四角背景默认改成圆角背景,所以就需要分析系统原生下拉通知栏的每条通知的默认背景, 然后通过systemui的通知…

相机的内参和外参介绍

注:以下相机内参与外参介绍除来自网络整理外全部来自于《视觉SLAM十四讲从理论到实践 第2版》中的第5讲:相机与图像,为了方便查看,我将每节合并到了一幅图像中 相机与摄像机区别:相机着重于拍摄静态图像&#x…

2019年 团体程序设计天梯赛——题解集

前言: Hello各位童学大家好!😊😊,茫茫题海你我相遇即是缘分呐,或许日复一日的刷题已经让你感到疲惫甚至厌倦了,但是我们真的真的已经达到了我们自身极限了吗?少一点自我感动&#xf…

Linux常用指令【文件目录操作】

linux 文件目录操作指令pwd 指令ls 指令cd 指令mkdir 指令rmdir 指令touch 指令cp 指令rm 指令mv 指令cat 指令more 指令less 指令> 和 >> 指令echo 指令head 指令tail 指令ln 指令history 指令pwd 指令 基本语法 pwd (显示当前工作目录的绝对路径) ls 指令 基本语法…

大数据项目实战之数据仓库:电商数据仓库系统——第2章 数据仓库建模概述

第2章 数据仓库建模概述 2.1 数据仓库建模的意义 如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置;如果把数据看作城市的建筑,我们希望城市规划布局合理;如果把数据看作电脑文件和文件夹,我们希…

【低压】DC-DC 降压恒流 车灯12-100V 2.5A 高干扰 全亮 半亮方案

产品描述 特点 应用领域 应用原理图 AP5127 是一款 PWM 工作模式,高效率、外 围简单、内置功率管,适用于 12-100V 输入的高 精度降压 LED 恒流驱动芯片。输出最大功率可达 25W,最大电流 2.5A。 AP5127 可实现全亮/半亮功能切换,通过 MODE 切…

cgroups是linux内核中限制、记录、隔离进程组(process groups)所使用的物理资源的机制

容器虚拟化 可以实现应用程序的隔离 直接使用物理机的操作系统可以快速响应用户请求 不占用部署时间 占用少量磁盘空间 缺点∶学习成本增加、操作控制麻烦、网络控制与主机虚拟化有所区别、服务治理难。 微服务架构师需要会多门编程语言,才能治理各种服务 三种…

Java初始泛型

目录 一、包装类 1、基本数据类型和对应的包装类 2、装箱和拆箱 3、自动装箱和自动拆箱 二、什么是泛型 三、引出泛型 1、泛型的语法 四、泛型类的使用 1、语法 2、示例 3、类型推导(Type Inference) 六、泛型如何编译的 1、擦除机制 2、为什么不能实例化泛型类…

C指针的简介与应用

C指针 感谢b站up主江科大自化协的讲解:https://www.bilibili.com/video/BV1Mb4y1X7dz/?spm_id_from333.999.0.0 该学习笔记也是基于up课程做的笔记,我的个人能力及理解的局限,不足之处还望大佬指正~ 9.1 指针简介 指针(Pointer)是C语言的…

【NX2023/1847】UG软件安装详细指南教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录安装包一、安装包内容检查二、安装步骤1.安装JAVA_WIN64.exe2.运行Launch.exe3.安装许可3.直接重启电脑(小白直接重启稳妥)4.重启后继续运行L…

【案例实践】R语言多元数据统计分析在生态环境中的实践应用

查看原文>>>R语言生物群落分析绘图、多元统计分析、CMIP6、遥感碳储量、GEE林业、InVEST等 生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate sta…