目录
[1. 多元素控件](#1. 多元素控件)
[2. QListWidget](#2. QListWidget)
[2.1 核心属性](#2.1 核心属性)
[2.2 核心方法](#2.2 核心方法)
[2.3 核心信号](#2.3 核心信号)
[2.4 demo1课程表](#2.4 demo1课程表)
[3. QTableWidget](#3. QTableWidget)
[3.1 QTableWidget 核心方法](#3.1 QTableWidget 核心方法)
[3.2 QTableWidgetItem 核心信号](#3.2 QTableWidgetItem 核心信号)
[3.3 QTableWidgetItem 核心方法](#3.3 QTableWidgetItem 核心方法)
[3.4 demo1学生表](#3.4 demo1学生表)
[4. QTreeWidget](#4. QTreeWidget)
[4.1 QTreeWidget 核⼼⽅法](#4.1 QTreeWidget 核⼼⽅法)
[4.2 QTreeWidget 核⼼信号](#4.2 QTreeWidget 核⼼信号)
[4.3 QTreeWidgetItem 核⼼属性](#4.3 QTreeWidgetItem 核⼼属性)
[4.4 QTreeWidgetItem 核⼼⽅法](#4.4 QTreeWidgetItem 核⼼⽅法)
[4.5 demo1创建一个动物树](#4.5 demo1创建一个动物树)
1. 多元素控件
QT中有六种三组多元素控件,分别是:
QListWidget ,QListViw.
QTableWidget ,QTableViw.
QTreeWidget ,QTreeViw.
其中细心的朋友可能发现了,一组中的两个控件只是后缀不一样,一个是Widget,一个是view,那么这两个有什么区别呢?以
QTableWidget 和 QTableView 为例:
QTableView 是基于 MVC 设计的控件. QTableView ⾃⾝不持有数据. 使⽤ QTableView 的时候需要⽤⼾创建⼀个Model 对象 (⽐如 QStandardModel ), 并且把 Model 和QTableView 关联起来. 后续修改 Model 中的数据就会影响 QTableView 的显⽰; 修改QTableView 的显⽰也会影响到 Model 中的数据(双向绑定).
QTableWidget 则是 QTableView 的⼦类, 对 Model 进⾏了封装. 不需要⽤⼾⼿动创建Model 对象, 直接就可以往 QTableWidget 中添加数据了,所以后续在使用多元素控件的时候都推荐使用Widget控件.
2. QListWidget
QListWidget是一个纵向列表.
2.1 核心属性
currentRow : 当前选中元素的行号.
count : 一共有多少行.
sortingEnabled : 是否允许排序.
isWrapping: 是否允许换行.
itemAlignment : 元素的对齐方式.
selectRectVisible : 被选中元素的矩形是否可见,默认可见.
spacing : 元素之间的间隔.
2.2 核心方法
**addItem(const Qstring& lable) addItem(QListWidgetItem* item)**列表中添加元素.
**currentItem()**返回QListWidgetItem*表示当前选中的元素.
setCurrrentItem (QListWidgetItem* item) 设置选择哪个元素.
setCurrentRow (int row) 设置选择的第几行元素.
**insertItem(const QString& lable,int row)**在指定的位置插入元素.
**item(int row)**返回QListWidgetItem*表示第row行的元素.
**takeItem(int row)**删除指定行的元素,返回QListWidgetItem*表示哪个元素被删除了.
2.3 核心信号
currentItemChanged(QListWidgetItem*current, QListWidgetItem* old) 选中不同元素时会触发. 参数是当前选中的元素和之前选中的元素.
currentRowChanged(int) 选中不同元素时会触发. 参数是当前选中元素的⾏数.
itemClicked(QListWidgetItem* item) 点击某个元素时触发
itemDoubleClicked(QListWidgetItem* item) 双击某个元素时触发
itemEntered(QListWidgetItem* item)⿏标进⼊元素时触发
2.4 demo1课程表
1)首先创建一些相关的控件

2)初始化控件

3)编写选中课程修改时显示出效果的代码

4)编写新增课程的代码

5)修改课程的代码

6)删除课程的代码

7)测试效果

3. QTableWidget
使用QTableWidget 表示一个表格控件.一个表格包含若干行,每一行又包含若干列.
表格中的每个元素都是一个QTableWidgetItem对象.
3.1 QTableWidget 核心方法
**item(int row, int column)**根据⾏数列数获取指定的 QTableWidgetItem*.
**setItem(int row, int column,QTableWidget*)**根据⾏数列数设置表格中的元素.
**currentItem()**返回被选中的元素 QTableWidgetItem* .
currentRow() 返回被选中元素是第⼏⾏.
currentColumn() 返回被选中元素是第⼏列.
**row(QTableWidgetItem* )**获取指定 item 是第⼏⾏.
**column(QTableWidgetItem* )**获取指定 item 是第⼏列
**rowCount()**获取⾏数
columnCount() 获取列数
**insertRow(int row)**在第 row ⾏处插⼊新⾏
insertColumn(int column) 在第 column 列插⼊新列
removeRow(int row) 删除第 row ⾏
**removeColumn(int column)**删除第 column 列
setHorizontalHeaderItem(int column,QTableWidget*) 设置指定列的表头
setVerticalHeaderItem(int row, QTableWidget*) 设置指定⾏的表头
3.2 QTableWidgetItem 核心信号
**cellClicked(int row, int column)**点击单元格时触发
cellDoubleClicked(int row, int column) 双击单元格时触发
cellEntered(int row, int column) ⿏标进⼊单元格时触发
**currentCellChanged(int row, int column, int previousRow, int previousColumn)**选中不同单元格时触发
3.3 QTableWidgetItem 核心方法
**row()**获取当前是第⼏⾏
column() 获取当前是第⼏列
setText(const QString&) 设置⽂本
setTextAlignment(int) 设置⽂本对⻬
setIcon(const QIcon&) 设置图标
**setSelected(bool)**设置被选中
setSizeHints(const QSize&) 设置尺⼨
setFont(const QFont&) 设置字体
3.4 demo1学生表
1)创建相关控件

2)初始化控件

3)增加行逻辑

4)增加列逻辑

5)删除行逻辑

6)删除列逻辑

7)增加学号查重机制

8)测试效果

4. QTreeWidget
使⽤ QTreeWidget 表⽰⼀个树形控件. ⾥⾯的每个元素, 都是⼀个 QTreeWidgetItem , 每个QTreeWidgetItem 可以包含多个⽂本和图标, 每个⽂本/图标为⼀个列.可以给 QTreeWidget 设置顶层节点(顶层节点可以有多个), 然后再给顶层节点添加⼦节点, 从⽽构成树形结构.
4.1 QTreeWidget 核⼼⽅法
**clear()**清空所有⼦节点
**addTopLevelItem(QTreeWidgetItem* item)**新增顶层节点
topLevelItem(int index) 获取指定下标的顶层节点.
**topLevelItemCount()**获取顶层节点个数
indexOfTopLevelItem(QTreeWidgetItem* item) 查询指定节点是顶层节点中的下标
**takeTopLevelItem(int index)**删除指定的顶层节点. 返回 QTreeWidgetItem* 表⽰被删除的元素
**currentItem()**获取到当前选中的节点, 返回 QTreeWidgetItem*
**setCurrentItem(QTreeWidgetItem* item)**选中指定节点
**setExpanded(bool)**展开/关闭节点
setHeaderLabel(const QString& text) 设置TreeWidget 的 header 名称
4.2 QTreeWidget 核⼼信号
**currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* old)**切换选中元素时触发
**itemClicked(QTreeWidgetItem* item, int col)**点击元素时触发
itemDoubleClicked(QTreeWidgetItem* item, int col) 双击元素时触发
itemEntered(QTreeWidgetItem* item, int col)⿏标进⼊时触发
itemExpanded(QTreeWidgetItem* item) 元素被展开时触发
**itemCollapsend(QTreeWidgetItem* item)**元素被折叠时触发
4.3 QTreeWidgetItem 核⼼属性
text: 持有的⽂本
textAlignment: ⽂本对⻬⽅式
icon : 持有的图表
font : ⽂本字体
hidden : 是否隐藏
disabled: 是否禁⽤
expand: 是否展开
sizeHint: 尺⼨⼤⼩
selected: 是否选中
4.4 QTreeWidgetItem 核⼼⽅法
addChild(QTreeWidgetItem* child) 新增⼦节点
childCount()⼦节点的个数
**child(int index)**获取指定下标的⼦节点. 返回 QTreeWidgetItem*
**takeChild(int index)**删除对应下标的⼦节点
removeChild(QTreeWidgetItem* child) 删除对应的⼦节点
**parent()**获取该元素的⽗节点
4.5 demo1创建一个动物树
1)创建相关控件

2)初始化控件

3)增加顶层元素逻辑

4)增加选中元素子节点逻辑

5)删除选择元素逻辑

6)测试效果
