[Qt 教程之Widgets模块] —— QBoxLayout盒模型布局

2023-10-17 23:30

本文主要是介绍[Qt 教程之Widgets模块] —— QBoxLayout盒模型布局,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt系列教程总目录

文章目录

    • 零、布局组件(Layouts)
    • 一、QBoxLayout
    • 二、QBoxLayout布局规则
    • 三、创建QBoxLayout
    • 四、成员函数
      • 1. 布局排列方向
      • 2. 控件间距
      • 3. 添加间隙
      • 4. 可拉伸控件(弹簧)
      • 5. 添加控件

零、布局组件(Layouts)

在这里插入图片描述

控件描述
Vertical Layout垂直布局
Horizontal Layout水平布局
Grid Layout网格布局
Form Layout表单布局

各控件类的继承关系如下:

在这里插入图片描述

一、QBoxLayout

QBoxLayout可以在水平方向或垂直方向上排列控件,由QHBoxLayoutQVBoxLayout继承。

QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。
QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。

如下图:

在这里插入图片描述

QHBoxLayoutQVBoxLayout都公有继承于QBoxLayout,没有自己的成员函数。

二、QBoxLayout布局规则

详见QBoxLayout布局规则

三、创建QBoxLayout

QBoxLayout只有一个构造函数如下:

explicit QBoxLayout(Direction, QWidget *parent = nullptr);

其中Direction是一个枚举,表示控件布局的方向:

enum Direction 
{ 	LeftToRight, RightToLeft, TopToBottom, BottomToTop,Down = TopToBottom, Up = BottomToTop 
};

枚举描述如下:

枚举描述
QBoxLayout::LeftToRight0水平方向从左到右
QBoxLayout::RightToLeft1水平方向从右到左
QBoxLayout::TopToBottom2垂直方向从上到下
QBoxLayout::BottomToTop3垂直方向从下到上

QHBoxLayoutQVBoxLayout的继承如下:

QHBoxLayout::QHBoxLayout(QWidget *parent) : QBoxLayout(LeftToRight, parent){}
QHBoxLayout::QHBoxLayout() : QBoxLayout(LeftToRight){}QVBoxLayout::QVBoxLayout(QWidget *parent) : QBoxLayout(TopToBottom, parent){}
QVBoxLayout::QVBoxLayout() : QBoxLayout(TopToBottom){}

他们构造的初始方向分别为:水平方向从左到右(QHBoxLayout)与垂直方向从上到下(QVBoxLayout)。

四、成员函数

QBoxLayout的常用函数如下:

1. 布局排列方向

Direction direction() const; // 获取当前排列方向
void setDirection(Direction); // 设置排列方向

QHBoxLayoutQVBoxLayout的构造函数可以看出,他们只是对QBoxLayout设置了不同的排列方向。

对于从QHBoxLayoutQVBoxLayout,还可重新设置排列方向。

在这里插入图片描述

2. 控件间距

void setSpacing(int spacing) override; // 设置控件间距大小
int spacing() const override; // 获取控件当前间距

3. 添加间隙

void addSpacing(int size); // 在控件队列最后面添加一个固定大小的间隙
void insertSpacing(int index, int size); // 在指定位置插入一个固定大小的间隙

4. 可拉伸控件(弹簧)

void addStretch(int stretch = 0); // 在控件队列最后面添加一个弹簧
void insertStretch(int index, int stretch = 0); // 在指定位置插入一个弹簧
// 一下函数不仅用于弹簧,也可用于其他控件
void setStretch(int index, int stretch); // 设置指定位置控件的拉伸系数
int stretch(int index) const; // 获取指定位置的拉伸系数

其中,index需要注意:

  • index从0开始;
  • 弹簧和原有控件分别占用一个index;
  • 插入后弹簧后,插入位置后面的index都会加 1;
  • 由于弹簧也是控件,所以布局的控件间距仍适用于弹簧与其他控件之间;
  • 如下图:
    • 布局(A),没有插入弹簧,三个PushButtonindex以此为0、1、2;
    • 布局(B),在PushButton1PushButton2之间插入一个弹簧,则PushButton2PushButton3index变为了2、3;
    • 布局(C),全部插入弹簧后,index依次变化。

所以手动插入弹簧时要注意index的变化。

在这里插入图片描述

对于拉伸系数stretch,即在sizePolicy的前提下,可拉伸控件按照什么样的比例分配空间,

  • 如果stretch0,该控件只保留自己最小的空间,不参与空间争夺
  • 如果sizePolicyFixed,该控件保持Fixed大小,也不参与空间争夺
  • 如果控件达到了sizePolicy或其他限制的大小,仍无法满足stretch所设置的比例,则控件以限制大小为准,不再按stretch所设置比例拉伸。
  • 如下图,
    • 布局(A),布局空间可以满足控件比例1:2:1PushButton1PushButton2PushButton3的大小分别为98:197:98
    • 布局(B),布局空间不足以满足控件比例1:2:3PushButton1PushButton2的比例明显不满足1:2
    • 如果布局空间不足以满足控件比例,这里还有个规律,就是先剥夺占比小的控件的空间,优先保证占比大的控件的比例。比如布局(B)中,先剥夺PushButton1的空间,不管他是不是满足控件比例,他们的大小分别为97:118:178,可以发现PushButton2PushButton3仍然满足2:3的比例。

在这里插入图片描述

5. 添加控件

// 在控件队列最后面添加一个新控件
// 其中可以指定控件的拉伸系数和对齐方式
void addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = Qt::Alignment());
// 在指定位置插入一个控件
void insertWidget(int index, QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment());

这篇关于[Qt 教程之Widgets模块] —— QBoxLayout盒模型布局的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228677

相关文章

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Linux下MySQL8.0.26安装教程

《Linux下MySQL8.0.26安装教程》文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友... 目录1.找到官网下载位置1.访问mysql存档2.下载社区版3.百度网盘中2.linux安装配置1.