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

相关推荐
墨雪不会编程4 小时前
C++之【深入理解Vector】三部曲最终章
开发语言·c++
浅念-4 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
小宋10214 小时前
Java 项目结构 vs Python 项目结构:如何快速搭一个可跑项目
java·开发语言·python
一晌小贪欢5 小时前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
阿猿收手吧!5 小时前
【C++】异步编程:std::async终极指南
开发语言·c++
小程故事多_805 小时前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc
沐知全栈开发5 小时前
SQL 日期处理指南
开发语言
黎雁·泠崖5 小时前
【魔法森林冒险】3/14 Allen类(一):主角核心属性与初始化
java·开发语言
黎雁·泠崖5 小时前
【魔法森林冒险】1/14 项目总览:用Java打造你的第一个回合制冒险游戏
java·开发语言
独好紫罗兰5 小时前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python