[Qt][多元素控件]详细讲解

目录

  • 0.前言
  • [1.List Widget](#1.List Widget)
  • [2.Table Widget](#2.Table Widget)
  • [3.Tree Widget](#3.Tree Widget)

0.前言

  • Qt中提供的多元素控件有:
    • 列表
      • QListWidget
      • QListView
    • 表格
      • QTableWidget
      • QTableView
    • 树形
      • QTreeWidget
      • QTreeView
  • WidgetView之间的区别 ,以QTableWidgetQTableView为例
    • QTableView是基于MVC设计的控件,QTableView⾃⾝不持有数据
      • View只负责实现视图,不负责数据如何存储表示,更不负责数据和视图之间的交互
      • 使⽤QTableView的时候需要⽤⼾创建⼀个Model对象(⽐如QStandardModel),并且把ModelQTableView关联起来
        • 后续修改Model中的数据就会影响QTableView的显⽰
        • 修改QTableView的显⽰也会影响到Model中的数据(双向绑定)
    • QTableWidget则是QTableView的**⼦类** ,Model进⾏了封装
      • 不需要⽤⼾⼿动创建Model对象,直接就可以往QTableWidget中添加数据
    • 总结View是更底层的实现,Widget是基于View封装而来的

1.List Widget

  • QListWidget能够显⽰⼀个纵向的列表
    • 列表中的每个元素就称为一个Item
    • 每个选项都可以被选中
  • 核心属性
    • currentRow:当前被选中的是第⼏⾏
    • count:⼀共有多少⾏
    • sortingEnabled:是否允许排序
    • isWrapping:是否允许换⾏
    • itemAlignment:元素的对⻬⽅式
    • selectRectVisible:被选中的元素矩形是否可⻅
    • spacing:元素之间的间隔
  • 核心方法
    • addItem(const QString& label) && addItem(QListWidgetItem* item):列表中添加元素
    • currentItem():返回QListWidgetItem*,表⽰当前选中的元素
    • setCurrentItem(QListWidgetItem* item):设置选中的那个元素
    • setCurrentRow(int row):设置选中第⼏⾏的元素
    • insertItem(const QString& label, int row) && insertItem(QListWidgetItem* item, int row):在指定的位置插⼊元素
      • row表示插入完毕之后,新元素在第几行
    • item(int row):返回QListWidgetItem*,表⽰第row⾏的元素
    • takeItem(int row):删除指定⾏的元素,返回QListWidgetItem*表⽰是哪个元素被删除了
  • 核心信号
    • currentItemChanged(QListWidgetItem* current, QListWidgetItem* old):选中不同元素时会触发,参数是当前选中的元素和之前选中的元素
    • currentRowChanged(int):选中不同元素时会触发,参数是当前选中元素的⾏数
    • itemClicked(QListWidgetItem* item):点击某个元素时触发
    • itemDoubleClicked(QListWidgetItem* item):双击某个元素时触发
    • itemEntered(QListWidgetItem* item):⿏标进⼊元素时触发
  • 上述介绍中,涉及到一个关键的类QListWidgetItem
    • 这个类表示QListWidget中的一个元素,本质是"文本+图标"构成的
    • 核心方法
      • setFont:设置字体
      • setIcon:设置图标
      • setHidden:设置隐藏
      • setSizeHint:设置尺⼨
      • setSelected:设置是否选中
      • setText:设置⽂本
      • setTextAlignment:设置⽂本对⻬⽅式

2.Table Widget

  • QTableWidget,表⽰⼀个表格控件
    • ⼀个表格中包含若⼲⾏,每⼀⾏⼜包含若⼲列
    • 表格中的每个单元格 ,是⼀个QTableWidgetItem对象
  • 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*):设置指定⾏的表头
  • QTableWidget核心信号
    • cellClicked(introw,intcolumn):点击单元格时触发
    • 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&):设置字体

3.Tree Widget

  • QTreeWidget表⽰⼀个树形控件
    • ⾥⾯的每个元素都是⼀个QTreeWidgetItem,每个QTreeWidgetItem可以包含多个⽂本和图标,每个⽂本/图标为⼀个列
    • 可以给QTreeWidget设置顶层节点(顶层节点可以有多个),然后再给顶层节点添加⼦节点,从⽽构成树形结构
  • 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):设置TreeWidgetheader名称
  • 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):元素被折叠时触发
  • QTreeWidgetItem核⼼属性
    • text:持有的⽂本
    • icon:持有的图标
    • font:⽂本字体
    • hidden:是否隐藏
    • disabled:是否禁⽤
    • expand:是否展开
    • sizeHint:尺⼨⼤⼩
    • selected:是否选中
  • QTreeWidgetItem核⼼方法
    • addChild(QTreeWidgetItem* child):新增⼦节点
    • childCount():⼦节点的个数
    • child(int index):获取指定下标的⼦节点,返回QTreeWidgetItem*
    • takeChild(int index):删除对应下标的⼦节点
    • removeChild(QTreeWidgetItem* child):删除对应的⼦节点
    • parent():获取该元素的⽗节点
相关推荐
星光樱梦23 分钟前
24. 正则表达式
c++
fathing24 分钟前
c# 调用c++ 的dll 出现找不到函数入口点
开发语言·c++·c#
hope_wisdom1 小时前
C++网络编程之SSL/TLS加密通信
网络·c++·ssl·tls·加密通信
erxij1 小时前
【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看
c++·经验分享·游戏·3d·游戏引擎
学习路上_write2 小时前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
林开落L2 小时前
前缀和算法习题篇(上)
c++·算法·leetcode
Prejudices2 小时前
C++如何调用Python脚本
开发语言·c++·python
单音GG2 小时前
推荐一个基于协程的C++(lua)游戏服务器
服务器·c++·游戏·lua
qing_0406032 小时前
C++——多态
开发语言·c++·多态
孙同学_2 小时前
【C++】—掌握STL vector 类:“Vector简介:动态数组的高效应用”
开发语言·c++