Qt --- 其他控件的介绍 --- 多元素控件
一、多元素控件
Qt中提供的多元素控件有:
QListWidget、QListView、QTableWidget、QTableView、QTreeWidget、QTreeView。
前两个为列表、中间两个为表格、后两个为树形。
xxWidget vs xxView是啥区别?
xxView是更底层的实现,xxWidget是基于xxView封装而来的。此处xxWidget是MVC结构的一种经典实现,MVC也是软件开发中,非常经典的软件结构的组织形式了。
M model 数据、V view 视图界面 C controller 控制器 数据和试图之间的业务流程,此处xxView只是负责实现了试图,不负责数据如何存储表示,更不负责数据和试图之间的交互。因此如果使用xxView就需要程序员自己实现model和controller部分,比较麻烦,xxWidget基于xxView同时把model和controller都帮我们实现好了,拿过来就可以使用,人家提供了功能很方便的api,让我们直接就用。
二、QListWidget 控件
核心属性
核心方法
列表中的每个元素/每一项就称为是一个Item,更具体的说,通过QListWidgetItem类表示的。
此处的row参数就表示插入完毕之后新的元素在第几行。把新元素插入到第几行之前。
核心信号
代码:
三、Table Widget控件
使用QTableWidget表示一个表格控件,一个表格中包含若干行,每一行又包含若干列,表格中的每个单元格,是一个QTableWidgetItem对象。
核心方法
核心信号
QTableWidgetItem核心方法
代码:
如果当前表格中的数据是固定的,完全就可以通过图形化界面来操作,但是实际开发中,很多时候数据是从文件/网络来加载的,此时通过图形化编辑就不合适。
四、Tree Widget控件
使用QTreeWidget表示一个树形控件,里面的每个元素,都是一个QTreeWidgetItem,每个QTreeWidgetItem可以包含多个文本和图标,每隔文本/图标为一个列。可以给QTreeWidget设置顶层节点,然后再给顶层节点添加子节点,从而构成树形结构。
QTreeWidget核心方法
QTreeWidget控件虽然是树形结构,但是这个树形结构,没有体现出根节点,是从根节点的下一层子节点开始计算的
QTreeWidgetItem核心方法
代码:
上述这几个控件相关的操作,数据都是在内存中保存的,无论在界面上做任何操作,重新运行程序,之前的数据就都没了。如果要想让数据能够重启也不丢失,就需要编写更多的代码把内存存储的数据获取到,写入到文件中,并且在下次运行的时候从文件加载数据。
五、QGroupBox的使用 容器类控件。
多元素控件,包含的内容是一个一个自定义好的Item对象,容器类控件包含的内容是前面已经学过的各种控件了。
QGroupBox分组框
可以把其他的各种控件放到GroupBox中,这些内部的控件的父元素就不是this了,而是这个GroupBox。就只是为了让界面看起来更好看一点,当一个界面比较复杂的时候,包含了很多控件的时候。分组框就可以把具有关联关系的控件,组织到一起。
核心属性
代码:麦当劳点餐
六、Tab Widget控件
核心属性
核心信号
代码:创建一个程序带有一个TableWidget作为标签页,提供两个按钮,分别创建新的标签页,关闭当前选中的标签页,当切换标签页的时候,也能感知到变化
七、QVBoxLayout的使用
布局管理器,之前把控件放到界面上都是靠手动的方式来布局的。这种手动调整的方式是不科学的。
1、手动布局的方式非常复杂,而且不精确
2、无法对窗口大小进行自适应
Qt种提供了很多种布局管理器,垂直布局,水平布局,网格布局,表单布局。
垂直布局管理器
代码:创建三个按钮,使用垂直布局管理器管理起来。
每个widget种只能设置一个布局管理器
如果我们在代码中创建layout其实是之创建了一个layout,如果在QtDesigner中创建的layout先创建了一个Widget,然后再在这个新的Widget中添加了一个layout
layout标签标识的是布局管理器的本体,外面自动创建除了一个Widget,每个layout里面又可以包含诺干个item(也就是一个按钮)。
刚才是先拖了layout过去,然后再王layout中拖其他控件,也可以先拖其他控件,后给这些控件套上layout。
八、QHBoxLayout的使用
核心属性
代码:
布局管理器之间,也能进行嵌套。
代码:
九、QGridLayout的使用
核心属性
代码:
拉升系数,刚刚创建的布局管理器,这里的控件尺寸都是均等的。当我们需要创建出尺寸不同的控件的时候,就可以通过拉伸系数来设置,拉伸系数就相当于设置控件之间尺寸的比例。
创建6个按钮,使用网格布局按照2*3的方式来排列。
如果拉伸系数设为0,意思是不参与拉伸。此时按钮的宽度是固定值。
上述代码,直接设置拉伸系数发现是无效的。这里之所以没有拉伸,是因为SizePolicy起到的影响。这个是QWidget的属性。
由于按钮垂直方向默认没有拉伸开(水平方向是默认拉伸的),因此垂直方向不会受到拉伸系数的影响。要想让垂直方向的拉伸系数生效,就需要让按钮先能够拉伸展开。
十、QFormLayout的使用
前端中有一个form标签,搭配其他的input标签,让网页端用户输入数据,并且提交的服务器。
代码:
十一、QSpacerItem的使用
是布局控制器里的控件有一定的间距
核心属性
代码:
上述的每个控件,都是可扩展的,每隔控件都是对应Qt内置的一个类,咱们在代码中都可以基于这个类,继承出你自定义类的子类。在这个自定义子类中,又可以添加很多的属性和方法,实现你自己的需求场景。还可以在子类中,把多个控件组合到一起。