QT中的常用控件 (四)

目录

[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)测试效果

相关推荐
用户805533698031 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner1 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz6 天前
QML Hello World 入门示例
qt
xcyxiner9 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner10 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner10 天前
DicomViewer (添加模型类)3
qt
xcyxiner11 天前
DicomViewer (目录调整) 2
qt
xcyxiner11 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00613 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术13 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript