Qt QGridLayout和QFormLayout案例分析

news2024/12/30 3:29:34

QGridLayout和QFormLayout是Qt中常用的布局管理器,可以用于在应用程序中设置控件的位置和大小。

QGridLayout网格布局(栅格布局)

QGridLayout是一个网格布局管理器,可以将控件放置在一个二维网格中。在QGridLayout中,控件可以跨越多个行和列,并且它们可以被设置为具有不同的大小和对齐方式。QGridLayout通常用于布置复杂的窗口,例如包含多个控件的表格或网格。

案例分析:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    QGridLayout *pGrid_layout;

    QPushButton *pb1;
    QPushButton *pb2;
    QPushButton *pb3;
    QPushButton *pb4;
};
#endif // WIDGET_H

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    pb1 = new QPushButton(this);
    pb1->setText("第一区:顶部菜单栏选项");
    pb1->setFixedHeight(40); // 设置固定大小高度

    pb1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); // QSizePolicy类是一个描述布局水平和垂直方向调整策略的属性

    pb2 = new QPushButton(this);
    pb2->setText("第二区:侧边栏选项");
    pb2->setFixedWidth(150); // 设置固定大小宽度

    pb2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    pb3 = new QPushButton(this);
    pb3->setText("第三区:底部选项");
    pb3->setFixedHeight(40); // 设置固定大小宽度

    pb3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    pb4=new QPushButton(this);
    pb4->setText("第四区:子窗体选项");
    pb3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

    pGrid_layout = new QGridLayout();

    // 设置左上右下边距
    pGrid_layout->setContentsMargins(0,0,0,0);

    pGrid_layout->setSpacing(0); // 设置各部件的相邻距离


    // 显示位置
    // addWidget(参数1,参数2,参数3,参数4,参数5,参数6)
    /*
    1:我要插入的子布局对象
    2:插入的开始行
    3:插入的开始列
    4:占用的行数
    5:占用的列数
    6:指定对齐方式
    */
    pGrid_layout->addWidget(pb1,0,1);
    pGrid_layout->addWidget(pb2,0,0,3,1);
    pGrid_layout->addWidget(pb3,2,1);
    pGrid_layout->addWidget(pb4,1,1);

    setLayout(pGrid_layout);
}

Widget::~Widget()
{
}

编译执行结果:

QFormLayout表单布局

QFormLayout是一种特殊类型的布局管理器,它在窗口中按行排列控件,并将标签与输入字段组成小组。QFormLayout通常用于在设置对话框中显示和编辑项目属性或设置。

案例分析:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();


};
#endif // WIDGET_H

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"

#include <QFormLayout>
#include <QLineEdit>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    setFixedSize(350,150); // 设置长和宽

    // 创建表单布局指针
    QFormLayout *qLayout = new QFormLayout(this);

    QLineEdit *le1=new QLineEdit(); // 输入学号
    QLineEdit *le2=new QLineEdit(); // 输入姓名
    QLineEdit *le3=new QLineEdit(); // 输入学校

    qLayout->addRow("学号",le1);
    qLayout->addRow("姓名",le2);
    qLayout->addRow("学校",le3);
    qLayout->setSpacing(8);

    // WrapAllRows将标签显示在单行编辑框上面
    // qLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);

    // WrapLongRows将标签显示在同一行。
    qLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);

    qLayout->setLabelAlignment(Qt::AlignLeft); // 设置标签对齐方式

    setWindowTitle("表单布局测试案例"); // 修改名字
}

Widget::~Widget()
{
}

编译执行结果:

两者适用场景:

总的来说,QGridLayout适合于放置复杂的控件,并且控件在布局中存在多种不同的大小和对齐方式。而QFormLayout则适合于创建具有简单布局的表单,其中每个控件都与一个标签相关联。

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

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

相关文章

2023年中国涂料助剂市场发展历程及趋势分析:中高端助剂市场规模将会迎来新的增长[图]

涂料助剂又称油漆辅料&#xff0c;系配制涂料的辅助材料&#xff0c;能改进涂料性能&#xff0c;促进涂膜形成。种类很多&#xff0c;包括催干剂、增韧剂、乳化剂、增稠剂、颜料分散剂、消泡剂、流平剂、抗结皮剂、消光剂、光稳定剂、防霉剂、抗静电剂等&#xff0c;其中用量最…

2023年中国临床质谱检测行业市场规模及行业竞争格局分析[图]

临床质谱检测是指质谱技术在临床检验中的应用&#xff0c;主要涉及临床生化检验、临床免疫学检验、临床微生物检验以及临床分子生物诊断等多方面&#xff0c;质谱诊断比传统诊断技术更具灵敏性、特异性和准确性&#xff0c;且具有高通量、高效率和低成本的优势。临床质谱技术可…

Allegro 17.2如何直接更新元件封装?

想必很多从事电子设计的小伙伴&#xff0c;都有这样的经历&#xff1a;有些时候原理图和PCB设计是由不同的工程师负责&#xff0c;然后偶尔需要在没有原理图的情况下直接对PCB作品进行操作&#xff0c;如更新元件封装等操作&#xff0c;这种环节不仅费时费力&#xff0c;效率贼…

Table ‘mysql.proc‘ doesn‘t exist

使用workbench 同步model 報錯 "Table ‘mysql.proc‘ doesn‘t exist" 爲什麽會出現這個錯誤&#xff1f; 原因&#xff1a;误删了mysql数据库 解决办法如下&#xff1a; 1、在服务列表里找到mysql&#xff0c;停止服务 2、把mysql文件夹下的data文件夹备份&…

微信小程序--》从模块小程序项目案例23.10.09

配置导航栏 导航栏是小程序的门户&#xff0c;用户进来第一眼看到的便是导航栏&#xff0c;其起着对当前小程序主题的概括。而我们 新建的小程序 时&#xff0c;第一步变开始配置导航栏。如下&#xff1a; 配置tabBar 因为配置tabBar需要借助字体图标&#xff0c;我这里平常喜…

uniapp快速入门系列(3)- CSS技巧与布局

章节三&#xff1a;CSS技巧与布局 1. uniapp中的样式编写2. 常见布局技巧与实例解析2.1 水平居中布局2.2 垂直居中布局2.3 等高布局2.4 响应式布局 3. CSS动画与过渡效果 在uniapp中&#xff0c;我们使用CSS来设置页面的样式和布局。本章将介绍一些在uniapp中常用的CSS技巧和布…

区块链技术在金融领域的应用场景

区块链技术在金融领域具有广泛的应用场景&#xff0c;它可以提供更安全、透明、高效和可信的金融服务。以下是一些区块链金融的主要应用场景&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.数字货币…

多媒体播放软件 Infuse mac中文特点介绍

Infuse mac是一款多媒体播放器应用&#xff0c;它支持播放多种格式的视频文件、音频文件和图片文件&#xff0c;并且可以通过AIrPlay将媒体内容投放到其他设备上。Infuse还支持在线视频流媒体播放和本地网络共享&#xff0c;用户可以通过它来访问家庭网络上的媒体文件。 Infuse…

【elasticsearch】elasticsearch8.0.1使用rpm包安装并启用TLS

背景 公司的业务需要在加密的情况下使用&#xff0c;为此&#xff0c;研究测试了一下es8是如何启用TLS的。以下是测试使用过程。 x-pack了解 在 Elasticsearch 7.11.0 版本及更高版本中&#xff0c;X-Pack 功能在默认情况下已经整合到 Elastic Stack 的各个组件中&#xff0…

黑盒测试方法:原理+实战

目录 一、如何设计测试用例 二、黑盒测试常用方法 1、基于需求进行测试用例的设计 2、等价类 3、边界值 4、判定表分析法&#xff08;因果分析法&#xff09; 5、正交表 6、场景设计法 三、案例补充 1、使用Fiddler模拟弱网 2、针对一个接口该如何测试 一、如何设计测试…

低成本开发一款苹果ios安卓apk双端的APP应用制作用什么语言研发浅谈一些低代码平台

这不是很懂代码的同学们还是比较多的吧&#xff0c;公司想开发一款app不想成本增加太大&#xff0c;不知道怎么找团队做事情&#xff0c;找什么语言的呢&#xff1f;都是最后能组成一个app但是不知道从哪里下手可以看看兄弟我的这篇文章哈&#xff0c;虽然不是很厉害&#xff0…

区块链技术-比特币数据结构

背景 随着近几年区块链技术的迅速发展&#xff0c;越来越多的行业正在将区块链技术应用到实际中去。例如&#xff0c;金融、物流、交易所等行业都开始尝试使用区块链技术来替代传统技术。伴随着区块链迅速发展的期间&#xff0c;诞生了比特币&#xff08;BTC&#xff09;、以太…

深度学习DAY1:神经网络NN;二元分类

深度学习笔记 DAY1 深度学习基本知识 1.神经网络 1.1 单一神经元 所有神经元将房屋大小size作为输入x,计算线性方程&#xff0c;结果取max&#xff08;0&#xff0c;y&#xff09;,输出预测房价y ReLU函数&#xff08;线性整流函数&#xff09;–max&#xff08;0&#xf…

二叉树的层序遍历 --力扣

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

vue3中动态设置ref,如表格中使用级联选择器

需求&#xff1a;vue3中有一个表格&#xff0c;表格里是表单项&#xff0c;用户可以输入或选择&#xff0c;有一项是一个级联选择器&#xff0c;需要使用到ref&#xff0c;然后通过getCheckedNodes()方法获取到这一项选择的数据。 数据源是一个级联选择器&#xff0c;如果这个表…

c++视觉处理-----膨胀腐蚀

c视觉处理膨胀腐蚀 膨胀腐蚀的区别 膨胀&#xff08;Dilation&#xff09;和腐蚀&#xff08;Erosion&#xff09;是形态学图像处理中的两种基本操作&#xff0c;它们有不同的效果和应用&#xff1a; 膨胀&#xff08;Dilation&#xff09;&#xff1a; 膨胀操作用于增加物体…

Compose加载本地图片和网络图片

加载本地图片 Image(modifier Modifier.fillMaxWidth().height(200.dp),painter painterResource(id R.drawable.img),contentDescription "描述",//0~1完全透明到完全不透明设置alpha 1f,//图片拉伸或裁剪设置contentScale ContentScale.Crop ) 加载本地图…

AntV G6 dom节点绑定事件问题

问题&#xff1a; graph.on("node:click"&#xff0c; e > {})监听不到dom节点里面对应事件 比如dom节点里面自定义按钮和输入框&#xff0c;需要监听按钮点击和输入框聚焦事件 效果如下&#xff1a; 对应代码&#xff1a; <template><div id"c…

数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

目录 前言 复杂度总结 预备代码 插入排序 1.直接插入排序: 时间复杂度O(N^2) \空间复杂度O(1) 复杂度&#xff08;空间/时间&#xff09;&#xff1a; 2.希尔排序&#xff1a; 时间复杂度 O(N^1.3~ N^2&#xff09; 空间复杂度为O(1) 复杂度&#xff08;空间/时间&#…

WiFi标签注册流程

7.5寸桌牌&#xff1a;K: 注册键&#xff0c;R: 复位键 长按K键不动&#xff0c;绿灯长亮&#xff0c;再按一下R键&#xff0c;等待绿灯快闪后就可以松开按键&#xff0c;绿灯变慢闪&#xff0c;设备即可进入配置注册模式。 4.2寸标签&#xff1a;右键: 注册键&#xff0c;背后…