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槽函数进行实现
实现了通过按钮添加元素,删除元素的操作