QT基础 - 布局管理器间隔控件

news2025/1/21 3:02:30

目录

一. QVBoxLayout

二. QHBoxLayout

三. QGridLayout

四. QFormLayout

五. Spacers

六.总结


一. QVBoxLayout

QVBoxLayout 主要用于将控件在垂直方向上进行排列。

它具有以下特点:

  • 可以方便地管理和组织控件,使其按照垂直顺序依次排列。
  • 能够自动根据添加的控件数量和尺寸来调整布局的整体高度。
  • 提供了简单直观的方式来构建具有垂直层次结构的界面。

通过使用 QVBoxLayout,可以让界面的布局更加清晰、有序,易于维护和扩展。它在许多 Qt 应用程序中被广泛使用,以实现各种不同的界面布局需求。

属性

  • 通常没有特定的独特属性,而是继承自父类的一些通用布局属性。

方法

  • addWidget(QWidget *widget):添加一个控件到布局中。
  • addLayout(QLayout *layout):添加一个子布局到该布局中。

实例代码

#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QPushButton>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    QWidget widget;

    QVBoxLayout *layout = new QVBoxLayout(&widget);

    QPushButton *button1 = new QPushButton("按钮 1");
    QPushButton *button2 = new QPushButton("按钮 2");

    layout->addWidget(button1);
    layout->addWidget(button2);

    widget.show();

    return a.exec();
}

效果图:

二. QHBoxLayout

QHBoxLayout 是一种将控件按水平方向依次排列的布局管理器。

其主要特点包括:

  • 让控件在水平方向上整齐排列,保持水平方向的对齐和间隔。
  • 能够自动处理控件之间的间距和布局的整体宽度。
  • 提供了简洁高效的方式来构建具有水平布局结构的界面。

在实际应用中,常用于构建菜单栏、工具栏等具有水平排列控件需求的界面部分。它使得界面的水平布局更加规范和易于管理,增强了界面的可读性和易用性。例如,在一个图形编辑软件的工具栏中,各种工具按钮可以通过 QHBoxLayout 进行整齐的水平排列。

属性

  • 同 QVBoxLayout 一样,主要继承自通用布局属性。

方法

  • addWidget(QWidget *widget):向布局中添加一个控件。
  • addLayout(QLayout *layout):添加一个子布局。

实例代码

#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    QWidget widget;

    QHBoxLayout *layout = new QHBoxLayout(&widget);

    QPushButton *button1 = new QPushButton("按钮 1");
    QPushButton *button2 = new QPushButton("按钮 2");

    layout->addWidget(button1);
    layout->addWidget(button2);

    widget.show();

    return a.exec();
}

效果图:

三. QGridLayout

QGridLayout 是一种将控件以网格形式进行排列的布局管理器。

它具有以下显著特点:

  • 可以灵活地将控件放置在网格的特定行和列中,实现精确的布局控制。
  • 支持跨行和跨列的控件放置,以适应不同的布局需求。
  • 能够自动调整网格的尺寸和间距,以适应所包含控件的数量和大小。

这种布局方式非常适合构建具有规则表格结构或需要精确位置控制的界面。比如在一个数据录入界面中,可以将各个输入字段按照行列整齐地排列;在游戏界面中,也可以用它来布置各种游戏元素的位置。它使得界面布局更加规范、整齐,同时提供了较好的可扩展性和可维护性。

属性方面一般较少有其特有的属性。

方法主要有:

  • addWidget(QWidget *widget, int row, int col, int rowSpan = 1, int colSpan = 1):将控件添加到指定的行和列,并可指定跨的行数和列数。
  • addLayout(QLayout *layout, int row, int col):添加一个子布局到指定位置。

实例代码:

#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QLabel>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    QWidget widget;

    QGridLayout *layout = new QGridLayout(&widget);

    QLabel *label1 = new QLabel("标签 1");
    QLabel *label2 = new QLabel("标签 2");
    QLabel *label3 = new QLabel("标签 3");

    layout->addWidget(label1, 0, 0);
    layout->addWidget(label2, 0, 1);
    layout->addWidget(label3, 1, 0);

    widget.show();

    return a.exec();
}

效果图:

四. QFormLayout

QFormLayout 是 Qt中的一个布局管理器,用于在窗口中创建表单布局。它能够根据需要自动调整表单元素的大小和位置,从而创建一个漂亮且具有一致性的表单界面。

QFormLayout 按照类似 HTML 表单的方式将窗口分割成行和列,每个表单元素都放置在一个单独的行中。每一行通常包含一个标签(用于描述表单元素的用途)和一个表单控件(如文本框、下拉框等)。

QFormLayout 具有以下优点:

  • 遵守不同平台的外观和感觉准则,支持不同的标签对齐方式。
  • 支持包装长行,对于具有小显示器的设备,可以将 QFormLayout 设置为包装长行,甚至包装所有行。
  • 提供了便捷的 API,用于创建标签-字段对。

属性

  • fieldGrowthPolicy:字段的增长方式,默认值取决于小部件或应用程序样式。
  • formAlignment:在布局的几何图形中保持窗体布局内容的对齐,默认值取决于小部件或应用程序样式。
  • horizontalSpacing:并排排列的小部件之间的间距,默认情况下,如果没有显式设置值,则布局的水平间距将从父布局或父小部件的样式设置继承。
  • verticalSpacing:垂直布局的小部件之间的间距,默认情况下,如果没有显式设置值,则布局的垂直间距将从父布局或父小部件的样式设置继承。
  • labelAlignment:标签的水平对齐,默认值取决于小部件或应用程序样式。
  • rowWrapPolicy:窗体行的换行方式,默认值取决于小部件或应用程序样式。

方法

  • addRow(QWidget *label, QWidget *field):在末尾新增一行,左侧添加标签,右侧添加控件。
  • addRow(QWidget *label, QLayout *field):在末尾新增一行,左侧添加标签,右侧添加布局。
  • addRow(const QString &labelText, QWidget *field):在末尾新增一行,使用指定的标签文本创建一个QLabel对象,并将其添加到左侧,右侧添加控件。
  • addRow(const QString &labelText, QLayout *field):在末尾新增一行,使用指定的标签文本创建一个QLabel对象,并将其添加到左侧,右侧添加布局。
  • insertRow(int row, QWidget *label, QWidget *field):在指定位置插入一行,左侧添加标签,右侧添加控件。
  • insertRow(int row, QWidget *label, QLayout *field):在指定位置插入一行,左侧添加标签,右侧添加布局。
  • insertRow(int row, const QString &labelText, QWidget *field):在指定位置插入一行,使用指定的标签文本创建一个QLabel对象,并将其添加到左侧,右侧添加控件。
  • insertRow(int row, const QString &labelText, QLayout *field):在指定位置插入一行,使用指定的标签文本创建一个QLabel对象,并将其添加到左侧,右侧添加布局。
  • setRowWrapPolicy(RowWrapPolicy policy):设置换行策略。
  • setWidget(int row, ItemRole role, QWidget *widget):设置行row所对应的控件。

代码示例:

#include <QApplication>
#include <QWidget>
#include <QFormLayout>
#include <QLabel>
#include <QLineEdit>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    window.setWindowTitle("QFormLayout Example");

    QFormLayout *layout = new QFormLayout;

    layout->addRow(new QLabel("Name:"), new QLineEdit());
    layout->addRow(new QLabel("Age:"), new QLineEdit());

    window.setLayout(layout);

    window.show();

    return app.exec();
}

效果图:

五. Spacers

Spacers(间隔器)用于在布局中不同部件间增加间隔,以辅助解决一些布局无法完美解决的部件布局排列美观问题。Qt的spacer布局控件主要用于填充两个控件之间的间隔距离,当窗口缩放时,弹簧会把控件向两端(上下、左右)进行弹起,其弹起量随窗口的变化而变化。spacer分为vertical spacer(垂直弹簧)和horizontal spacer(水平弹簧)两种。

以下是一个使用Spacers的示例代码:

#include <QApplication>
#include <QWidget>
#include <QFormLayout>
#include <QLabel>
#include <QLineEdit>
#include <QSpacerItem>
#include<QPushButton>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    window.setWindowTitle("Spacers Example");

    QFormLayout *layout = new QFormLayout;

    // 添加标签和输入框
    layout->addRow(new QLabel("Name:"), new QLineEdit());
    layout->addRow(new QLabel("Age:"), new QLineEdit());

    // 添加垂直间隔
    QSpacerItem *verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
    layout->addItem(verticalSpacer);

    // 添加按钮
    layout->addRow(new QPushButton("OK"), new QPushButton("Cancel"));

    window.setLayout(layout);

    window.show();

    return app.exec();
}

效果图:

六.总结

  • QVBoxLayout:垂直布局管理器,用于将控件从上到下依次排列。
  • QHBoxLayout:水平布局管理器,用于将控件从左到右依次排列。
  • QGridLayout:网格布局管理器,用于将控件按照行和列的方式排列。
  • QFormLayout:表单布局管理器,用于将标签和输入控件配对排列。
  • Spacers:间隔器,用于在布局中不同部件间增加间隔.

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

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

相关文章

视频批量剪辑利器:轻松掌握尺寸修改技巧,支持自定义及预设尺寸,提升剪辑效率!

在数字化时代&#xff0c;视频已经成为我们生活中不可或缺的一部分。无论是社交媒体上的短视频&#xff0c;还是公司宣传的长视频&#xff0c;都离不开精心剪辑与处理。然而&#xff0c;对于很多小伙伴来说&#xff0c;视频剪辑仍然是一项既耗时又耗力的任务。尤其是当需要处理…

算法训练营第六十天(延长12天添加图论) | LeetCode 647 回文子串、LeetCode 516 最长回文子序列

LeetCode 67 回文子串 思路很简单&#xff0c;每一个dp[i]等于dp[i-1]加上当前字符向前直到0各个长度字符串回文串个数即可 代码如下&#xff1a; class Solution {public boolean isValid(String s) {int l 0, r s.length() - 1;while (l < r) {if (s.charAt(l) ! s.ch…

钡铼技术BL104在环境监测站多协议采集保障数据全面准确

随着工业化和城市化进程的加快&#xff0c;环境污染问题日益严重&#xff0c;环境监测站在保护生态环境、保障公众健康中的作用变得越来越重要。钡铼技术PLC物联网关BL104&#xff0c;为环境监测站提供了一种高效、可靠的多协议数据采集解决方案&#xff0c;保障了监测数据的全…

Multisim软件仿真之频谱分析仪

网络上有很多Multisim文件&#xff0c;有些是不能复现的&#xff0c;比如频谱仪&#xff0c;按照下面链接去操作&#xff0c;怎么也测试不出来波形&#xff0c;multisim频谱仪使用_multisim输入输出端口-CSDN博客。 原因分析&#xff1a; 1、博主设置参数未讲全&#xff0c;按…

sprintboot依赖管理和自动配置

springboot依赖管理和自动配置 依赖管理和自动配置依赖管理什么是依赖管理修改自动仲裁/默认版本号 starter场景启动器starter场景启动器基本介绍官方提供的starter第三方starter 自动配置自动配置基本介绍SpringBoot自动配置了哪些?如何修改默认配置如何修改默认扫描包结构re…

APP渗透、WIFI近源渗透之透明代理下的流量分析与嗅探

APP渗透、WIFI近源渗透之透明代理下的流量分析与嗅探 原文链接&#xff1a;https://xz.aliyun.com/t/14864 前言 在攻防中对APP进行渗透时可能会遇到代理及VPN的检测&#xff0c;以及在近源渗透时可能会有WIFI钓鱼的需求&#xff0c;而透明代理是一个很好的解决方案&#xf…

完整迁移方案+工具:Citrix替换,无感迁移!

随着用户的替换进程进入到演进的阶段&#xff0c;用户面临的重大挑战包括&#xff1a; &#xff08;1&#xff09;大量数据的迁移需要精确规划&#xff0c;以避免数据丢失或损坏&#xff1b; &#xff08;2&#xff09;迁移效率低下&#xff0c;不仅会增加迁移成本&#xff0c;…

深度解读等保2.0标准

在数字经济时代&#xff0c;信息安全已成为一个不容忽视的问题&#xff0c;其中&#xff0c;等级保护机制也是一个不断演化的过程。近几年&#xff0c;国内发生了一次重要的变化&#xff0c;就是等保2.0标准的颁布和执行。文章对该协议2.0进行了详细的阐述&#xff0c;并对其在…

波兰媒体海外宣发:波兰媒体投放助力企业在波兰力挽狂澜-大舍传媒

引言 在全球化的背景下&#xff0c;企业对海外市场的开拓变得愈发重要。波兰作为中东欧地区的重要经济体之一&#xff0c;吸引了越来越多的企业眼球。在这一过程中&#xff0c;波兰媒体的海外宣发起到了关键作用。本文将重点探讨大舍传媒、比得哥什日报和瓦维尔快讯这三家波兰…

记一次 .NET某机械臂上位系统 卡死分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友找到我&#xff0c;说他们的程序会偶发性的卡死一段时间&#xff0c;然后又好了&#xff0c;让我帮忙看下怎么回事&#xff1f;窗体类的程序解决起来相对来说比较简单&#xff0c;让朋友用procdump自动抓一个卡死时的dump&#x…

macOS vscode常用快捷键

1、shiftoption上下箭头 复制当前行 2、commandd 选定多个相同的单词 先双击选定一个单词&#xff0c;然后按下commandd 依次选中要修改的单词&#xff0c;直接修改即可 3、全局替换某个单词 comandh 4、快速定位到某一行 controlg 5、选中某个区域 shiftoption&#xff0c;然…

医学人工智能在“免疫组化”领域的最新研究进展|顶刊速递·24-06-19

小罗碎碎念 顶刊速递&#xff5c;AI免疫组化 今天分享的文献主题是——人工智能与免疫组化的结合。其实之前的推文中也偶尔会提到免疫组化相关的内容&#xff0c;但是一直没有出一期&#xff0c;系统的梳理一下这一部分内容在医学AI中的应用&#xff0c;所以这期推文便来完成…

LabVIEW在中国航天中的应用

​LabVIEW是一种系统设计平台及开发环境&#xff0c;由美国国家仪器公司&#xff08;NI&#xff09;开发。它在中国航天领域的应用非常广泛&#xff0c;涵盖了测试与测量、数据采集、控制系统设计等多个方面。以下是LabVIEW在中国航天中的几个主要应用实例&#xff1a; 1. 测试…

微信小程序笔记 二!

小程序的宿主环境 - 宿主环境简介 1. 什么是宿主环境 宿主环境&#xff08;host environment&#xff09;指的是程序运行所必须的依赖环境。例如&#xff1a; Android 系统和 iOS 系统是两个不同的宿主环境。安卓版的微信 App 是不能在 iOS 环境下运行的&#xff0c;所以&…

shell脚本 函数

函数 shell的函数 定义&#xff1a;将命令序列按照格式写在一起。格式指的是函数的固定格式。两种格式。 for i in {} do 命令序列 done if [ ] then 命令序列 fi 作用&#xff1a;方便重复使用。函数库&#xff0c;集中在一起&#xff0c;随时可以传参调用。大的工…

数据资产安全保卫战:构建多层次、全方位的数据安全防护体系,守护企业核心数据资产安全

一、引言 在信息化时代&#xff0c;数据资产已成为企业运营的核心&#xff0c;其安全性直接关系到企业的生存与发展。然而&#xff0c;随着网络技术的飞速发展&#xff0c;数据泄露、黑客攻击等安全威胁日益增多&#xff0c;给企业的数据资产安全带来了严峻挑战。因此&#xf…

Python将Markdown格式转为HTML:轻松实现博客文章的自动化处理

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 引言 编写一篇高质量的博客文章并非易事&#xff0c;尤其是在排版和格式方面。Markdown作为一种轻量级的标记语言&#xff0c;为博主们提供了一种简洁、高效的写作方式。而Python作为一门强大的编程语言&#xff0c…

如何通过小猪APP分发轻松实现在线封装APP

什么是在线封装APP&#xff1f; 你是否曾经为开发一款APP而头疼不已&#xff1f;特别是当你需要频繁进行封装测试时&#xff0c;整个过程显得尤为耗时且复杂。在线封装APP的工具就显得尤为重要。在线封装APP就是通过网络平台快速生成和更新应用程序&#xff0c;无需复杂的本地…

python5 正则表达式

Python中的正则表达式是一种强大的工具&#xff0c;用于在文本中搜索、匹配和处理特定模式的字符串。它们通过定义一种模式&#xff0c;使得可以轻松地搜索、替换、提取和验证文本数据&#xff0c;在Python中的正则表达式由re模块提供支持的。 正则表达式通常用于以下任务&…

HTML5休闲小游戏《城堡守卫传说》源码,引流、刷广告利器

HTML5休闲小游戏《城堡守卫传说》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods467802.html