QT中的常用控件(五)

目录

[1. 容器类控件](#1. 容器类控件)

[1.1 QGroupBox](#1.1 QGroupBox)

[1.1.1 核心属性](#1.1.1 核心属性)

[1.1.2 demo1 点菜机](#1.1.2 demo1 点菜机)

[1.2 QTabWidget](#1.2 QTabWidget)

[1.2.1 核心属性](#1.2.1 核心属性)

[1.2.2 核心信号](#1.2.2 核心信号)

[1.2.3 demo1 QTabWidget的使用](#1.2.3 demo1 QTabWidget的使用)

[2. 布局管理器](#2. 布局管理器)

[2.1 QVBoxLayout](#2.1 QVBoxLayout)

[2.1.1 核心属性](#2.1.1 核心属性)

[2.1.2 demo1 使用QVBoxLayout 管理多个控件](#2.1.2 demo1 使用QVBoxLayout 管理多个控件)

[2.2 QHBoxLayout](#2.2 QHBoxLayout)

[2.2.1 核心属性](#2.2.1 核心属性)

[2.2.2 demo1 垂直布局管理器中嵌套水平布局管理器](#2.2.2 demo1 垂直布局管理器中嵌套水平布局管理器)

[2.3 QGridLayout](#2.3 QGridLayout)

[2.3.1 核心属性](#2.3.1 核心属性)

[2.3.2 demo1 QGridLayout使用](#2.3.2 demo1 QGridLayout使用)

[2.4 QFormLayout](#2.4 QFormLayout)


1. 容器类控件

顾名思义,这类控件可以放入多个控件,在这里面的控件的父对象不再是Widget,而是这个容器控件.容器类控件一般有 QGroupBox分组框QTabWidget标签页.


1.1 QGroupBox

QGroupBox可以对控件进行分组,使页面变得更加好看与整洁.

注意, 不要把 QGroupBox 和QButtonGroup 混淆.

1.1.1 核心属性

title: 分组框的标签
alignment : 分组框内部内容的对齐方式.
flat: 是否是"扁平模式".
checkable: 是否可选择.
checked : 是否是选择状态.

1.1.2 demo1 点菜机

1)创建控件

这里使用了三个分组框使三种有关联性的控件分别为一组,美化了界面

2)测试效果


1.2 QTabWidget

QTabWidget 是一个标签页,其中可以添加一些控件.

1.2.1 核心属性

tabPosition : 标签页所在的方位.
currrentIndex : 当前选中的是第几个标签页.
currentTabText : 当前选中标签页的文本.
currentIcon : 当前选中标签页的图标.
tabsCloseable : 标签页是否可以关闭.
movable : 是否可以移动.

1.2.2 核心信号

currentChange(int) 在标签页发生切换时触发,参数为被点击的选项卡编号.
**tabBarClicked(int)**在点击选项卡的标签条的时候触发,参数为被点击的选项卡编号.
**tabBarDouble(int)**在双击选项卡的标签条的时候触发.
tabCloseRequest(int) 在标签页被关闭的时候触发.

1.2.3 demo1 QTabWidget的使用

1)创建相关控件

2)初始化控件

3)增加标签页

这里建议先创建标签页再设置当前选中的标签页.在QT中子控件在创建的初始状态是隐藏的,只有某个操作调用了当前控件的show()函数才会将这个控件显示出来,例如:

情况一:先创建w,再创建label,然后一起显示

  • 创建 Widget w(此时 w 是隐藏的)。

  • 创建 Label 并挂载到 w 上(此时 Label 是隐藏的)。

  • 最后调用 setCurrentIndex。这会导致 TabWidget 切换页面,从而触发 w 的显示(show())。

  • 当父控件 w 从隐藏变为显示时,它会自动调用所有子控件的显示方法。所以 Label 跟随 w 一起显示出来了。

情况2:先创建w,再显示w,然后创建label

  • 创建 Widget w

  • 调用 setCurrentIndex。此时 TabWidget 立即把 w 显示出来了(w 变成了 Visible 状态)。

  • 之后 才创建 Label 并挂载到 w 上。

  • 因为父控件 w 已经 是显示状态了,新创建的子控件 Label 不会收到"父控件变为显示"的通知。而新控件默认又是隐藏的,所以它就一直保持隐藏状态。

此时如果想要Label显示出现只能手动调用显示函数 label->show().

4)删除标签页

5)感知标签页切换

6)测试效果

2. 布局管理器

QT中有一类控件叫做布局管理器,将控件添加到布局管理器中的时候不需要调整它们的位置,布局管理器会自动调整,并且根据窗口大小来自适应控件对的尺寸.

2.1 QVBoxLayout

QVBoxLayout表示垂直布局管理器.

2.1.1 核心属性

layoutLeftMargin 左侧边距
layoutRightMargin 右侧边距
layoutTopMargin 上⽅边距
layoutBottomMargin下⽅边距
layoutSpacing 相邻元素之间的间距

Layout只是用来布局,没有提供信号.

2.1.2 demo1 使用QVBoxLayout 管理多个控件

1)初始化控件

2)测试效果

2.2 QHBoxLayout

QHBoxLayout表示水平布局管理器.

2.2.1 核心属性

与QVBoxLayout的属性一致

layoutLeftMargin 左侧边距
layoutRightMargin 右侧边距
layoutTopMargin 上⽅边距
layoutBottomMargin下⽅边距
layoutSpacing 相邻元素之间的间距

2.2.2 demo1 垂直布局管理器中嵌套水平布局管理器

1)初始化控件

2)测试效果

2.3 QGridLayout

QGridLayout是一个网格布局管理器

2.3.1 核心属性

layoutLeftMargin 左侧边距
layoutRightMargin 右侧边距
layoutTopMargin 上⽅边距
layoutBottomMargin下⽅边距
layoutSpacing 相邻元素之间的间距
layoutRowStretch⾏⽅向的拉伸系数
layoutColumnStretch 列⽅向的拉伸系数

2.3.2 demo1 QGridLayout使用

1)初始化控件

2)测试效果

2.4 QFormLayout

除了上述的布局管理器之外, Qt 还提供了QFormLayout, 属于是 QGridLayout 的特殊情况, 专⻔⽤于实现两列表单的布局.

2.4.1 demo1使用QFormLayout 创建表单

1)创建控件

2)测试效果

相关推荐
lly2024062 小时前
PHP 运算符
开发语言
txinyu的博客2 小时前
make_shraed & make_unique 替代了new ? 什么场景使用new
开发语言·c++·算法
阿巴~阿巴~2 小时前
从钓鱼到高性能服务器:深入解析操作系统五大 I/O 模型
运维·服务器·网络·系统调用·五种i/o模型
你不是我我2 小时前
【Java 开发日记】我们来说一下无锁队列 Disruptor 的原理
java·开发语言
一只小bit2 小时前
Qt 重要控件:多元素控件、容器类控件及布局管理器
前端·c++·qt
期待のcode2 小时前
Java虚拟机堆
java·开发语言·jvm
Larry_Yanan2 小时前
Qt多进程(十)匿名管道Pipe
开发语言·qt
一条咸鱼_SaltyFish2 小时前
Spring Cloud Gateway鉴权空指针惊魂:HandlerMethod为null的深度排查
java·开发语言·人工智能·微服务·云原生·架构
啊吧怪不啊吧5 小时前
UU远程协助迎来升级!第一期更新实测
运维·服务器·远程工作