QTreeWidget和QTreeWidgetItem

news2024/11/23 8:28:33

QTreeWidget介绍

QTreeWidget 是一个用于显示层次结构数据的 Qt 控件,它以树状结构的形式展示项目和子项。每个项目都可以包含子项,并且可以通过展开和折叠来浏览整个树。

QTreeWidget类是一个方便的类,它提供了一个带有经典基于项目的界面的标准树窗口部件,类似于Qt 3中QListView类使用的界面。该类基于Qt的模型/视图架构,并使用默认模型来保存项目,其中每个项目都是QTreeWidgetItem。

不需要模型/视图框架的灵活性的开发人员可以使用这个类非常容易地创建简单的层级列表。一个更灵活的方法是将QTreeView与标准的项模型结合使用。这样可以将数据的存储与其表示分离。

以下是 QTreeWidget 的一些主要特点和功能:

  1. 显示层次结构:QTreeWidget 可以显示多级层次结构的数据。每个项目可以有任意数量的子项,从而创建一个树状结构。

  2. 自定义项目和子项:每个项目或子项都可以包含自定义的文本、图标和其他附加信息。这使得每个项目可以呈现丰富的数据内容。

  3. 可编辑性:QTreeWidget 具有可编辑的功能,允许用户直接在控件中编辑项目的文本内容。

  4. 可排序性:你可以启用 QTreeWidget 的排序功能,根据特定的列对项目进行排序。

  5. 展开和折叠:QTreeWidget 允许用户展开或折叠项目的子项,以便浏览或隐藏更深层次的子项。

  6. 选择模式:QTreeWidget 支持多种选择模式,包括单选、多选和扩展选择。你可以根据需要配置不同的选择模式。

  7. 信号和槽机制:QTreeWidget 发出各种信号来响应用户交互或数据变化。你可以通过连接这些信号与自定义槽函数来实现特定的功能。

  8. 右键菜单:QTreeWidget 支持上下文菜单(右键菜单),你可以在项目或子项上显示自定义的菜单项,并在用户右击鼠标时触发相应的操作。

总之,QTreeWidget 是一个功能强大的 Qt 控件,适用于展示和编辑层次结构数据。它提供了丰富的功能和灵活的配置选项,使你能够创建出具有良好交互性和可扩展性的树形视图。

QTreeWidget的接口

QTreeWidget类是Qt框架提供的一个树形控件,用于显示带有层次结构的数据。下面是QTreeWidget类常用接口的详细介绍:

  1. 构造函数:QTreeWidget(parent) - 创建一个空的树形控件对象,可指定父级窗口。

  2. addItem(item) - 向树形控件中添加一个QTreeWidgetItem项,该项作为根项添加到树中。

  3. addTopLevelItem(item) - 向树形控件添加一个顶级项,在树中作为根项添加。

  4. insertTopLevelItem(index, item) - 在指定索引位置插入一个顶级项。

  5. topLevelItem(index) - 获取指定索引位置的顶级项。

  6. takeTopLevelItem(index) - 移除并返回指定索引位置的顶级项。

  7. invisibleRootItem() - 返回根项。

  8. clear() - 清空树形控件中的所有项。

  9. setHeaderLabels(labels) - 设置树形控件的列标签,labels为一个字符串列表。若控件有多列,则每个标签对应一列。

  10. setColumnCount(count) - 设置树形控件的列数。

  11. setColumnWidth(column, width) - 设置指定列的宽度。

  12. header() - 获取树形控件的头部控件(QHeaderView)。

  13. currentTopLevelItem() - 获取当前选中的顶级项。

  14. selectedItems() - 获取所有选中的项。

  15. currentItem() - 获取当前选中的项。

  16. expandAll() - 展开所有的项。

  17. collapseAll() - 折叠所有的项。

  18. setSelectionMode(mode) - 设置选择模式,可选的模式有QAbstractItemView.NoSelection、QAbstractItemView.SingleSelection等。

  19. editItem(item, column) - 编辑指定项的指定列。

  20. setCurrentItem(item, column) - 设置当前选中的项及其所在列。

这些是QTreeWidget类的一些常用接口,通过使用这些接口,我们可以对树形控件进行添加、删除、编辑、展开折叠等操作,实现灵活多样的树形结构数据展示。

QTreeWidget的顶级项

在QTreeWidget中,"顶级项"指的是树形控件中的最高层级的项,也就是树的根节点。它们是树形结构的最上层节点,在控件中作为第一层显示,并且可以包含子项。

顶级项是树形控件中的主要分支,所有其他项都直接或间接地连接到它们。你可以通过调用QTreeWidget的addTopLevelItem()方法向树形控件添加顶级项,或者使用insertTopLevelItem()在指定位置插入顶级项。

每个顶级项通常表示一个独立的数据集,并可以具有子项。子项可以通过调用QTreeWidgetItem的addChild()方法添加到顶级项中。这样就可以在每个顶级项下创建一个分支层次结构。

根据需要,你可以通过调用topLevelItem()方法获取特定索引位置的顶级项,或者通过调用invisibleRootItem()方法获取根项。此外,还有一些针对顶级项的操作,比如移除、查找、选择等。

总之,顶级项是树形控件中的最高级别的项,它们组织了树的结构,可以包含子项,并提供了对树形控件的基本操作。

QTreeWidgetItem介绍

QTreeWidgetItem 是用于 QTreeWidget 的一个类,它代表树状结构中的项目或子项。每个 QTreeWidgetItem 对象都可以包含文本、图标和其他附加信息,以及子项列表。

以下是 QTreeWidgetItem 的一些主要特点和功能:

  1. 层次结构:QTreeWidgetItem 可以嵌套在其他 QTreeWidgetItem 中,从而形成多级的树状层次结构。

  2. 文本和图标:每个 QTreeWidgetItem 可以设置一个或多个文本和图标来显示在 QTreeWidget 中。这使得你可以自定义每个项目的外观和内容。

  3. 数据存储:除了文本和图标之外,QTreeWidgetItem 还可以使用 setData() 方法将自定义数据与项目关联起来。这对于保存额外的信息或标记特定的项目很有帮助。

  4. 子项:每个 QTreeWidgetItem 可以包含任意数量的子项。可以使用 addChild() 方法添加子项,并使用 child() 方法获取特定索引的子项。

  5. 自定义属性:QTreeWidgetItem 支持自定义属性,可以用于存储和检索与项目相关的额外信息。可以使用 setFlags() 方法来启用或禁用项目的不同属性。

  6. 可编辑性:你可以通过设置 QTreeWidgetItem 的 flags 属性来指定项目是否可编辑。这允许用户直接在 QTreeWidget 中编辑项目的文本内容。

  7. 信号和槽机制:QTreeWidgetItem 发出各种信号来响应项目的状态变化或用户交互。你可以通过连接这些信号与自定义槽函数来实现特定功能。

  8. 排序和过滤:在排序 QTreeWidget 或进行项目过滤时,可以使用 QTreeWidgetItem 的相关方法和属性来控制项目的顺序和可见性。

总之,QTreeWidgetItem 是 QTreeWidget 控件中用于表示项目和子项的重要类。它提供了丰富的功能和灵活的配置选项,用于自定义每个项目的外观和行为,并支持层次结构的管理和操作。通过使用 QTreeWidgetItem,你可以轻松创建一个具有层次结构的树形视图,并对项目进行各种操作和处理。

QTreeWidgetItem的接口

以下是QTreeWidgetItem类的常用接口:

  • 构造函数:

    • QTreeWidgetItem(parent=None, type=QTreeWidgetItem.Type):创建一个带有指定父项和类型的新项。
  • 获取和设置数据:

    • setData(column, role, value):在指定列和角色下设置当前项的数据值。
    • data(column, role):返回当前项在指定列和角色下的数据值。
  • 获取和设置文本:

    • setText(column, text):设置当前项在指定列的文本。
    • text(column):返回当前项在指定列的文本。
  • 获取和设置图标:

    • setIcon(column, icon):设置当前项在指定列的图标。
    • icon(column):返回当前项在指定列的图标。
  • 布尔属性:

    • setCheckState(column, state):设置当前项在指定列的复选框状态。
    • checkState(column):返回当前项在指定列的复选框状态。
  • 获取父项和子项:

    • parent():返回当前项的父项。
    • child(index):返回当前项的指定索引处的子项。
    • childCount():返回当前项的子项数量。
  • 获取同级项:

    • previousSibling():返回当前项的前一个同级项。
    • nextSibling():返回当前项的后一个同级项。
  • 遍历子项:

    • childItems():返回当前项的所有子项的列表。
  • 删除和移除:

    • takeChild(index):移除并返回当前项的指定索引处的子项。
    • removeChild(child):从当前项中移除指定的子项。
  • 判断项是否存在:

    • indexOfChild(child):返回当前项的指定子项的索引。
    • isHidden():返回当前项是否被隐藏。
  • 获取树形控件:

    • treeWidget():返回包含当前项的树形控件对象。

以上是QTreeWidgetItem类的一些常用接口,通过使用这些接口,可以对树形控件的各个项进行数据操作、文本设置、图标设置、复选框状态设置、子项管理等操作。

代码演示

#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QDebug>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    // 创建主窗口和树形控件
    QTreeWidget treeWidget;
    treeWidget.setWindowTitle("分类目录演示");
    treeWidget.setHeaderLabels(QStringList() << "分类" << "具体项目");

    // 创建根节点
    QTreeWidgetItem* rootItem = new QTreeWidgetItem(&treeWidget);
    rootItem->setText(0, "电子产品");

    // 创建子节点和具体项目
    QTreeWidgetItem* phoneItem = new QTreeWidgetItem(rootItem);
    phoneItem->setText(0, "手机");

    QTreeWidgetItem* appleItem = new QTreeWidgetItem(phoneItem);
    appleItem->setText(0, "苹果");
    appleItem->setData(0, Qt::UserRole, "Apple Inc.");  // 设置自定义数据

    QTreeWidgetItem* iphone12Item = new QTreeWidgetItem(appleItem);
    iphone12Item->setText(1, "iPhone 12");
    iphone12Item->setData(1, Qt::UserRole, "2020年发布的新款iPhone");

    QTreeWidgetItem* iphone11Item = new QTreeWidgetItem(appleItem);
    iphone11Item->setText(1, "iPhone 11");
    iphone11Item->setData(1, Qt::UserRole, "2019年发布的iPhone");

    QTreeWidgetItem* xiaomiItem = new QTreeWidgetItem(phoneItem);
    xiaomiItem->setText(0, "小米");
    xiaomiItem->setData(0, Qt::UserRole, "小米科技有限责任公司");

    QTreeWidgetItem* mi11Item = new QTreeWidgetItem(xiaomiItem);
    mi11Item->setText(1, "小米11");
    mi11Item->setData(1, Qt::UserRole, "小米的旗舰手机");

    QTreeWidgetItem* redmiNote9Item = new QTreeWidgetItem(xiaomiItem);
    redmiNote9Item->setText(1, "红米Note 9");
    redmiNote9Item->setData(1, Qt::UserRole, "小米旗下的低价手机");

    QTreeWidgetItem* computerItem = new QTreeWidgetItem(rootItem);
    computerItem->setText(0, "电脑");

    QTreeWidgetItem* lenovoItem = new QTreeWidgetItem(computerItem);
    lenovoItem->setText(0, "联想");
    lenovoItem->setData(0, Qt::UserRole, "Lenovo Inc.");  // 设置自定义数据

    QTreeWidgetItem* xiaoxinItem = new QTreeWidgetItem(lenovoItem);
    xiaoxinItem->setText(1, "联想小新");
    xiaoxinItem->setData(1, Qt::UserRole, "联想旗下的性价比电脑");

    QTreeWidgetItem* zhengjiuzheItem = new QTreeWidgetItem(lenovoItem);
    zhengjiuzheItem->setText(1, "联想拯救者");
    zhengjiuzheItem->setData(1, Qt::UserRole, "联想旗下的游戏电脑");

    QTreeWidgetItem* huaweiItem = new QTreeWidgetItem(computerItem);
    huaweiItem->setText(0, "华为");
    huaweiItem->setData(0, Qt::UserRole, "HUAWEI Inc.");  // 设置自定义数据

    QTreeWidgetItem* bookDItem = new QTreeWidgetItem(huaweiItem);
    bookDItem->setText(1, "华为 matebook16s");
    bookDItem->setData(1, Qt::UserRole, "华为旗下的中端电脑");

    QTreeWidgetItem* bookSItem = new QTreeWidgetItem(huaweiItem);
    bookSItem->setText(1, "华为 matebook16s");
    bookSItem->setData(1, Qt::UserRole, "华为旗下旗舰电脑");

    // 将根节点添加到树形控件中
    treeWidget.addTopLevelItem(rootItem);

    // 点击项时输出相关文本和数据
    QObject::connect(&treeWidget, &QTreeWidget::itemClicked, [&](QTreeWidgetItem* item, int column) {
        qDebug() << "具体项目:" << item->text(column);
        qDebug() << "数据:" << item->data(column, Qt::UserRole);
    });

    treeWidget.expandAll();

    // 显示主窗口
    treeWidget.show();

    treeWidget.setFixedSize(600,600);

    return a.exec();
}

运行结果:

 

 依次点击具体项目后的输出:

具体项目: "iPhone 12"

数据: QVariant(QString, "2020年发布的新款iPhone")

具体项目: "iPhone 11"

数据: QVariant(QString, "2019年发布的iPhone")

具体项目: "小米11"

数据: QVariant(QString, "小米的旗舰手机")

具体项目: "红米Note 9"

数据: QVariant(QString, "小米旗下的低价手机")

具体项目: "联想小新"

数据: QVariant(QString, "联想旗下的性价比电脑")

具体项目: "联想拯救者"

数据: QVariant(QString, "联想旗下的游戏电脑")

具体项目: "华为 matebook16d"

数据: QVariant(QString, "华为旗下的中端电脑")

具体项目: "华为 matebook16s"

数据: QVariant(QString, "华为旗下旗舰电脑")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/910732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI极客日报0822 - AI创作是否应该有版权?

&#x1f440;AI 日报合集 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; 人工智能系统依法享有版权吗&#xff1f;这位法官给出了肯定的答案。让我们开始吧。 今日看点&#xff1a; 一位联邦法官明确表示&#xff0c;AI创作的艺术品没有版权&#xff01;中国&#xff0c…

WGS84地球坐标系,GCJ02火星坐标系,BD09百度坐标系简介与转换 资料收集

野火 ATGM332D简介 高性能、低功耗 GPS、北斗双模定位模块 STM32 GPS定位_为了维护世界和平_的博客-CSDN博客 秉火多功能调试助手上位机开源&#xff01;共六款软件&#xff0c;学到你吐... , - 电脑上位机 - 野火电子论坛 - Powered by Discuz! https://www.firebbs.cn/for…

静态代码扫描工具 Sonar 配置及使用

概览 Sonar 是一个用于代码质量管理的开放平台。通过插件机制&#xff0c;Sonar 可以集成不同的测试工具&#xff0c;代码分析工具&#xff0c;以及持续集成工具。与持续集成工具&#xff08;例如 Hudson/Jenkins 等&#xff09;不同&#xff0c;Sonar 并不是简单地把不同的代…

定向流量卡怎么没人买了呢?你知道定向流量卡有多坑吗?

在购买流量卡的时候大家可能都注意了&#xff0c;市面上的流量卡有三种&#xff0c;定向流量卡&#xff0c;通用流量卡&#xff0c;通用流量定向流量卡&#xff0c;据小编了解&#xff0c;现在越来越多的人比较喜欢购买后两者&#xff0c;而关注定向流量卡越来越少了。 其实用过…

中国移动秋招攻略,网申测评和面试

中国移动秋招简介 按照往年的惯例来看&#xff0c;移动会在每年的8月份发布相关秋招信息&#xff0c;紧接着考生并进行网申&#xff0c;面试的时间跨度也非常的长&#xff0c;大概是9~12月份。整个招聘流程&#xff0c;包括投递简历网申&#xff0c;笔试测评&#xff0c;面试录…

SQL Server、MySQL和Oracle数据库分页查询的区别与联系

摘要&#xff1a;本文将通过一个现实例子&#xff0c;详细解释SQL Server、MySQL和Oracle这三种常见关系型数据库在分页查询方面的区别与联系。我们将提供具体场景下的SQL语句示例&#xff0c;并解释每个数据库的分页查询用法以及优化方法&#xff0c;帮助读者更好地选择适合自…

大白话聊聊Innodb的锁机制

大白话聊聊Innodb的锁机制 引言理清 "锁" 类型锁锁的类型非锁定读(MVCC)锁定读用来保护 "自增长计数器" 的锁外键和锁 加锁算法精确匹配查询如何关闭Gap Lock小结 幻读问题小结 锁问题脏读不可重复读丢失更新 阻塞死锁死锁发生概率死锁案例 锁升级小结 引言…

go 微服务 consul

服务发现 在微服务中每一个服务都有一个ip端口&#xff0c;如果由客户端来之间进行连接会不方便&#xff0c;因此服务将自己的ip端口提交给服务发现&#xff08;常见的有consul,etcd&#xff0c;nacos&#xff09;,客户端通过服务发现来获取服务的ip端口 consul 去下载&…

Serialize对象二进制序列化与反序列化存储参数代替ini文件

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在C#中&#xff0c;可以使用System.Runtime.Serialization命名空间中的类来进行序列化操作。 以下是在C#中使用序列化的基本步骤&#xff1a; 创建一个可序列化的类&#xff0c;并标记该类和需要序列化的属性或字段…

deeplabv3+源码之慢慢解析26 第五章utils文件夹(1)ext_transforms.py--2个翻转类和ExtCompose类

系列文章目录&#xff08;更新中&#xff09; 第一章deeplabv3源码之慢慢解析 根目录(1)main.py–get_argparser函数 第一章deeplabv3源码之慢慢解析 根目录(2)main.py–get_dataset函数 第一章deeplabv3源码之慢慢解析 根目录(3)main.py–validate函数 第一章deeplabv3源码之慢…

Maven解析

目录 Maven的概念 Pom 项目坐标 仓库 Maven环境搭建 安装jdk 配置maven 配置本地仓库地址 配置阿里云 maven 镜像仓库&#xff0c;下载速度更快 在idea中配置maven ​编辑 pom中名词解释 Maven命令 Maven的概念 Maven 是 Apache 软件基金会的一个开源项目,是一个…

PySide6学习笔记--基础环境的安装配置

PySide6介绍 QT官方发布Qt6.0之后&#xff0c;紧接着于2020年12月10日发布了PySide 6&#xff0c;对应C版的Qt6。从PySide6开始&#xff0c;PySide的命名也会与Qt的大版本号保持一致。需要注意的是使用PySide6开发的程序在默认情况下&#xff0c;不兼容Windows7系统&#xff0c…

QT 使用图表

目录 1、概念 1.1 坐标轴-QAbstractAxis 1.2 系列-QAbstractSeries 1.3 图例-Legend 1.4 图表-QChart 1.5 视图-QChartView 2、 QT 折线图 2.1 Qt 折线图介绍 2.2 Qt 折线图实现 Qt 图表是专门用来数据可视化的控件 Qt 图表包含折线、饼图、棒图、散点图、范围图等。…

英文翻译照片怎么做?掌握这个方法轻松翻译

在现代社会中&#xff0c;英文已经成为了一种全球性的语言&#xff0c;因此&#xff0c;我们在阅读文章或者查看图片时&#xff0c;经常会遇到英文的内容。为了更好地理解这些英文内容&#xff0c;我们需要将其翻译成中文。在本文中&#xff0c;我将探讨图片中英文内容翻译的方…

mysql通过binlog日志恢复误删数据

1、先查看binlog功能是否开启 show variables like %log_bin%;log_bin为ON说明可以使用binlog恢复&#xff0c;如果为OFF说明没有开启binlog。 2、删除部分数据做测试 3、查找binlog文件位置 show variables like %datadir%;cd /var/lib/mysqlls -l删除数据时间是在文件154与…

2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

文章目录 React&#xff1a;构建用户界面的首选Vue&#xff1a;简单优雅的前端框架Angular&#xff1a;Google支持的全面框架Node.js&#xff1a;服务器端的JavaScript运行环境比较不同框架的优势与劣势React&#xff1a;Vue&#xff1a;Angular&#xff1a;Node.js&#xff1a…

数字档案长期保存EEP文件管理和四性检测系统工具

数字(电子)档案EEP封装包工具软件&#xff08;nhdeep&#xff09;&#xff0c;可以生成和导入长期保存标准格式的EEP封装文件&#xff0c;进行目录查看和条目信息查看&#xff0c;以及原文文件的查看。并提供对长期保存EEP封装文件的四性检测功&#xff0c;能保障封装文件质量。…

IP地址SSL证书

在许多企业用例中&#xff0c;公司需要SSL证书作为IP地址。公司使用IP地址通过Internet或Intranet访问各种类型的应用程序。根据组织策略&#xff0c;您希望使用SSL证书保护IP地址。 在本文中&#xff0c;我将向您解释获取IP地址SSL证书的过程&#xff0c;以及哪种类型的SSL证…

三菱PLC与变频器之间无线通讯

在工业现场由PLC远程控制变频器的应用非常常见&#xff0c;如果挖沟布线不便或者变频器在移动设备上&#xff0c;那么采用无线通讯就是最佳方案。 这里我们选用最常用的三菱 FX2N PLC和三菱变频器为例&#xff0c;并结合日系plc专用无线通讯终端DTD435M来说明PLC与变频器之间的…

MySQL 运维篇+单机多实例多版本部署初始化缺少sys库概述

说明&#xff1a;本文讲述MySQL在单机多实例多版本部署情况下初始化后缺少sys库问题方案&#xff1a;初始化数据库前建议暂时将其他实例的Default options&#xff08;/etc/my.cnf等&#xff09;重命名结论&#xff1a;初始化新实例时即使指定相关参数也有可能会受到默认参数的…