QT多元素控件及其属性
Qt中提供的多元素控件有:
QListWidget
QListView
QTableWidget
QTableView
QTreeWidget
QTreeView
widget和view多元素控件的区别:
view是更底层的实现,widget是基于view封装而来,view是MVC结构的一种典型实现
MVC结构:
- --model数据
 
V---view视图(界面)
C---controller控制器 数据和视图之间的业务流程
此处的view多元素控件只负责实现了视图,不负责数据如何存储表示,无控制器
因此如果要使用view的多元素控件就要自己实现model和controller的部分
而widget多元素控件基于view多元素控件同时把model和controller都实现好了,有可用直接使用的接口
List Widget
使用QListWidget能够显示一个纵向的列表
如:

核心属性
|   属性  |   说明  | 
|   currentRow  |   当前被选中的是第几行  | 
|   count  |   一共有多少行  | 
|   sortingEnabled  |   是否允许排序  | 
|   isWrapping  |   是否允许换行  | 
|   itemAlignment  |   元素的对齐方式  | 
|   selectRectVisible  |   被选中的元素矩形是否可见  | 
|   spacing  |   元素之间的间隔  | 
核心方法
|   方法  |   说明  | 
|   addItem(const QString& label) addItem(QListWidgetItem *item)  |   列表中添加元素  | 
|   currentItem  |   返回QListWidgetItem* 表示当前 选中的元素  | 
|   setCurrentItem(QListWidget* item)  |   设置选中哪个元素  | 
|   setCurrentRow(int row)  |   设置选中第几行的元素  | 
|   insertItem(const QString& label,int row)  |   在指定位置插入元素  | 
|   item(int row)  |   返回QListWidgetItem* 表示row 行的元素  | 
|    takeItem(int row)  |   删除指定行的元素,返回 QListWidgetItem* 表示哪个元素 被删除了  | 
核心信号
|   信号  |   说明  | 
|   currentItemChanged(QListWidget* current,QListWidgetItem* old)  |   选中不同元素时会触发,参数是 当前选中的元素和之前选中的元 素  | 
|   currentRowChanged(int)  |   选中不同元素时会触发,参数是 当前选中元素的行数  | 
|   itemClicked(QListWidgetItem* item)  |   点击某个元素时触发  | 
|   itemDoubleClicked(QListWidgetItem* item)  |   双击某个元素时触发  | 
|   itemEntered(QListWidgetItem* item)  |   鼠标进入元素时触发  | 
例:
在ui界面创建一个ListWidget,一个lineEdit,两个pushButton
实现输入框接收内容插入到listWidget中

在构造函数进行ListWidget的元素添加

还可用在ui界面通过右键ListWidget控件选中编辑项目进行元素添加



添加三个元素后转到新增按钮的槽函数

再转到删除按钮的槽函数

就可以通过按钮配合输入框实现LineEdit中元素的新增与删除

Tabel Widget
使用TableWidget表示一个表格控件,一个表格中包含若干行,每一行又包含若干列,表格中的每个单元格都是一个QTableWidgetItem对象
TableWidget核心方法
|   方法  |   说明  | 
|   item(int row,int column)  |   根据行数列数获取指定的QTableWidgetItem*  | 
|   setItem(int row,int column,TableWidget*)  |   根据行数列数设置表格中的元素  | 
|   currentnItem()  |   返回被选中的元素 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列  | 
|   setVerticalHeaderItem(int row,QTableWidget*)  |   设置指定行的表头  | 
|   setHorizeontalHeaderItem(int row,QTableWidget*)  |   设置指定列的表头  | 
核心信号
|   信号  |   说明  | 
|   cellClicked(int row,int column)  |   点击单元格时触发  | 
|   cellDoubleClicked(int row,int column)  |   双击单元格时触发  | 
|   cellEntered(int row,int column)  |   鼠标进入单元格时触发  | 
|   currentCellChanged(int row,int column,int previousRow,int previousColumn)  |   选中不同单元格时触发  | 
QTableWidgetItem核心方法
|   方法  |   说明  | 
|   row()  |   获取当前是第几行  | 
|   column()  |   获取当前是第几列  | 
|   setText(const QString&)  |   设置文本  | 
|   setTextAlignment(int)  |   设置文本对齐  | 
|   setIcon(const QIcon&)  |   设置图标  | 
|   setSelected(bool)  |   设置被选中  | 
|   setSizeHints(const QSize&)  |   设置尺寸  | 
|   setFont(const QFont&)  |   设置字体  | 
例:
在ui界面创建一个TableWidget,四个功能按钮,一个lineEdit用于接收列名

在构造函数对lineEdit进行初始化

在构造函数对表格数据进行初始化

再尝试给表格添加数据

转到新增一行按钮的槽函数进行实现

转到删除选中行的槽函数进行实现

转到新增一列的槽函数进行实现


转到删除选中列槽函数进行实现

从而实现通过按钮控制表格

TreeWidget
使用TreeWidget表示一个树形控件,里面的每个元素都是一个QTreeWidgetItem,每个QTreeWidgetItem可用包含多个文本和图标,每个文本/图标为一个列
可以给TreeWidget设置顶层节点(可以有多个),然后给顶层阶段添加字节到,从而构成树形结构
TreeWidget核心方法
|   方法  |   说明  | 
|   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名称  | 
TreeWidget核心信号
|   信号  |   说明  | 
|   currentItemChanged(QTreeWidgetItem* current,QTreeWidgetItem* old)  |   切换选中元素时触发  | 
|   itemClicked(QTreeWidgetItem* item,int col)  |   点击元素时触发  | 
|   itemDoubleClicked(QTreeWidget* item,int col)  |   双击元素时触发  | 
|   itemEntered(QTreeWidgetItem* item,int col)  |   鼠标进入时触发  | 
|   itemExpanded(QTreeWidgetItem* item)  |   元素被展开时触发  | 
|   itemCollapsend(QTreeWidget* item)  |   元素被折叠时触发  | 
QTreeWidgetItem核心属性
|   属性  |   说明  | 
|   text  |   持有的文本  | 
|   textAlignment  |   文本对齐方式  | 
|   icon  |   持有的图标  | 
|   font  |   文本字体  | 
|   hidden  |   是否隐藏  | 
|   disabled  |   是否禁用  | 
|   expand  |   是否展开  | 
|   sizeHint  |   尺寸大小  | 
|   selected  |   是否被选中  | 
QTreeWidgetItem核心方法
|   方法  |   说明  | 
|   addChild(QTreeWidgetItem* child)  |   新增子节点  | 
|   childCount()  |   子节点的个数  | 
|   child(int index)  |   获取指定下标的子节点,返回QTreeWidgetItem*  | 
|   takeChild(int index)  |   删除对应下标的子节点  | 
|   removeChild(QTreeWidgetItem* child)  |   删除对应的子节点  | 
|   parent()  |   获取该元素的父节点  | 
例:
在ui界面创建一个TreeWidget,一个lineEdit作为输入框,用来添加新节点,3个pushButton分别用来实现不同的功能

在构造函数对lineEdit的提示内容进行初始化

在构造函数对TreeWidget设置根节点名字,插入元素

转到添加顶层按钮的clicked信号的槽函数进行实现

转到添加选中元素按钮的clicked信号的槽函数进行实现

转到删除选中元素按钮的clicked槽函数进行实现

实现了通过按钮添加元素,删除元素的操作
