目录
多元素控件介绍
QListWidget
QTableWidget
QTreeWidget
多元素控件介绍
多元素控件表示这个控件中包含了很多的元素,元素可能指的是字符串,也可以指的是更加复杂的数据结构、图片等等
Qt 中提供的多元素控件有:
- QListWidget
- QListView
- QTableWidget
- QTableView
- QTreeWidget
- QTreeView
上述前两个表示列表,中间两个表示表格,后两个表示树形
xxWidget vs xxView 的区别:
- xxView 是更底层的实现
- xxWidget 是基于 xxView 封装而来的
- 此处 xxView 是 MVC 结构的一种典型实现
M model 数据
Vview视图 (界面)
C controller 控制器 数据和视图之间的业务流程
此处 xxView 只是负责实现了视图,不负责数据如何存储表示,更不负责数据和视图之间的交互,因此如果使用 xxView,就需要程序员自己实现 model 和 controller 的部分,就比较麻烦
xxWidget 基于 xxView,同时把 model 和 controller 都帮我们实现好了,拿过来就可以使用,人家提供了功能很方便的 api,让我们直接用
- xxView:使用起来更麻烦一些,但是可以根据情况来自由 diy,实现更复杂的功能
- xxWidget:使用比较方便,但是功能比较有限
QListWidget
使用 QListwidget 能够显示一个纵向的列表
核心属性:
核心方法:
- 列表中的每个元素/每一项就称为是一个 ltem,更具体的说,是通过 QListWidgetltem 类表示的
- addItem 默认在末尾插入,insertItem 可以指定在第几行插入,row就表示插入完毕后新的元素在第几行
核心信号:
图形化界面的方式拖动 ListWidget、输入框 LineExit、两个 pushButton:
接着初始化 ListWidget,有两种方式:
第一种是图形化界面中,右键 QListwidget选择编辑项目,就可以直接添加内容
第二种是通过代码的方式,在构造函数中添加:
下面设置新增和删除两个按钮的槽函数:
效果如下,初始是三个内容:
如果输入内容,点击新增,就会默认新增到末尾(因为代码中使用的是 addItem):
选中左边列表的 Python,点击删除,就会删除掉:
也可以完善 ListWidget 的槽函数,每次选中时打印此次和上一次选中的内容:
运行程序:
QTableWidget
使用 QTablewidget 表示一个表格控件,一个表格中包含若干行,每一行又包含若干列
表格中的每个单元格,是一个 QTableWidgetItem 对象
核心方法:
核心信号:
核心方法:
图形化界面的方式创建:
并将这四个按钮的 objectName 设置好:
表格中输出数据的设置,与 QListWidget 一样,既可以使用图形化界面的方式,也可以使用代码的方式
如果当前表格中的数据是固定的完全就可以通过图形化的方式来进行编辑
但是实际开发中,很多时候数据是从文件/网络来加载的,此时通过图形化编辑不合适
下面使用代码的方式进行设置:
运行程序:
下面完成四个按钮的槽函数:
运行程序,初始为:
点击新增一行:
选中4和5行,点击删除选中行:
输入框中输入年级,并点击新增一列:
选中年级那一列,点击删除选中列:
QTreeWidget
使用 QTreeWidget 表示一个树形控件,里面的每个元素,都是一个 QTreeWidgetItem
每个QTreewidgetItem 可以包含多个文本和图标,每个文本/图标为一个列
可以给 QTreewidget 设置顶层节点(顶层节点可以有多个),然后再给顶层节点添加子节点,从而构成树形结构
QTreeWidget 控件虽然是树形结构,但是这个树形结构,没有体现出根节点,是从根节点的下一层子节点开始计算的,所以根节点的下一层子节点称为 topLevelItem
QTreeWidget 可以理解为 QTableWidget 的进化版本
- QTableWidget 固定一行中有很多列
- QTreeWidget 它是一个树形结构,树形结构中的每一个结点又可以包含多个列
QTreeWidget 核心方法:
QTreeWidget 核心信号:
QTreeWidgetItem核心属性:
QTreeWidgetItem 核心方法:
图形化界面的方式创建 tree Widget、输入框、三个按钮
并将按钮的 objectName 改为:
下面就需要初始化数据了,也是有两种方式
第一种,右键编辑项目
如下所示:
点击确定:
此时运行程序:
上述的 1 表示根节点的名字,可以手动修改
但是实际开发中,很多时候数据是从文件/网络来加载的,此时通过图形化编辑不合适,所以就需要使用
第二种,代码的方式
在构造函数中添加代码:
此时运行程序,与刚刚的效果一样:
下面实现三个按钮的功能:
pushButton_insertTopLevelItem:
pushButton_insertItem:
pushButton_deleteItem:
上述这几个控件相关的操作,数据都是在内存中保存的,无论在界面上做任何操作,重新运行程序,之前的数据就都没了
如果要想让数据能够重启也不丢失,就需要编写更多的代码,把内存存储的数据获取到,写入到文件中,并且在下次运行的时候从文件加载数据
Qt之多元素控件到此结束