当前位置: 首页 > news >正文

【嵌入式——QT】QTreeWidget

QTreeWidget类是创建和管理目录树结构的类,QTreeWidget每一个节点都是一个QTreeWidgetItem对象,添加一个节点前需先创建。QTreeWidget类是一个便利类,它提供了一个标准的树widget,具有经典的基于item的界面,类似于Qt 3中的QListView类所使用的界面。这个类基于Qt的Model/View架构,并使用默认模型来保存项目,每个项目都是一个QTreeWidgetItem。
不需要模型/视图框架的灵活性的开发人员可以使用这个类非常容易地创建简单的分层列表。更灵活的方法是将QTreeView与标准项模型相结合。这允许将数据的存储与其表示分开。

常用函数

  • addTopLevelItem(QTreeWidgetItem *item):将该项添加为小部件中的顶级项;
  • addTopLevelItems(const QList<QTreeWidgetItem *> &items):将项目列表添加为小部件中的顶级项目;
  • closePersistentEditor(QTreeWidgetItem *item, int column = 0):关闭给定列中项目的持久编辑器。如果没有为项和列的组合打开持久编辑器,则此函数无效;
  • columnCount() const:返回列数;
  • currentColumn() const:返回树小部件中的当前列;
  • currentItem() const:返回树部件中的当前项;
  • editItem(QTreeWidgetItem *item, int column = 0):开始编辑给定列中的项目(如果它是可编辑的);
  • findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const:使用给定标志返回给定列中与给定文本匹配的项的列表;
  • headerItem() const:返回树部件标题所用的项;
  • indexOfTopLevelItem(QTreeWidgetItem *item) const:返回给定的顶级项的索引,如果找不到该项,则返回-1;
  • insertTopLevelItem(int index, QTreeWidgetItem *item):在视图的最顶层的索引处插入项目;
  • insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items):在视图的最顶层的索引处插入项目列表;
  • invisibleRootItem() const:返回树小部件的不可见根项;
  • isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const:返回列中的项是否打开持久编辑器;
  • itemAbove(const QTreeWidgetItem *item) const:返回给定项之上的项;
  • itemAt(const QPoint &p) const:返回一个指向坐标p处元素的指针。坐标是相对于树部件的视口()的;
  • itemAt(int x, int y) const
  • itemBelow(const QTreeWidgetItem *item) const:返回给定项下方的项;
  • itemWidget(QTreeWidgetItem *item, int column) const:返回显示在item和给定列指定的单元格中的小部件;
  • openPersistentEditor(QTreeWidgetItem *item, int column = 0):为给定列中的项打开一个持久编辑器;
  • removeItemWidget(QTreeWidgetItem *item, int column):删除给定列中给定项中设置的小部件;
  • selectedItems() const:返回所有选定的非隐藏项的列表;
  • setColumnCount(int columns):设置列数;
  • setCurrentItem(QTreeWidgetItem *item):设置树部件中的当前项;
  • setCurrentItem(QTreeWidgetItem *item, int column):设置树部件中的当前项;
  • setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command):设置树部件中的当前项;
  • setHeaderItem(QTreeWidgetItem *item):设置树部件的标题项;
  • setHeaderLabel(const QString &label):在标题中为labels列表中的每个项目添加一列,并为每一列设置标签;
  • setHeaderLabels(const QStringList &labels):在标题中为labels列表中的每个项目添加一列,并为每一列设置标签;
  • setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget):设置给定的小部件在给定的项和列指定的单元格中显示;
  • sortColumn() const:返回用于对小部件内容进行排序的列。;
  • sortItems(int column, Qt::SortOrder order):根据给定列中的值,按指定顺序对小部件中的项进行排序;
  • takeTopLevelItem(int index):删除树中给定索引处的顶层元素并返回该元素,否则返回nullptr;
  • topLevelItem(int index) const:返回给定索引处的顶级项,如果项不存在则返回nullptr;
  • topLevelItemCount() const:返回顶级元素的数量;
  • visualItemRect(const QTreeWidgetItem *item) const:返回视口中每个元素所占据的矩形;

槽函数

  • clear():删除树部件的所有项;
  • collapseItem(const QTreeWidgetItem *item):关闭项目。这将导致包含子项的树被折叠;
  • expandItem(const QTreeWidgetItem *item):展开项目。这将导致包含该项子项的树被扩展;
  • scrollToItem(const QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible):确保项目可见,并在必要时使用指定的提示滚动视图;

信号

  • currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous):当当前元素发生变化时,就会发出这个信号;
  • itemActivated(QTreeWidgetItem *item, int column):当用户通过单击或双击或按下特殊键来激活一个项目时,就会发出此信号;
  • itemChanged(QTreeWidgetItem *item, int column):当指定项中的列的内容发生更改时,就会发出此信号;
  • itemClicked(QTreeWidgetItem *item, int column):当用户在widget内部单击时,就会发出这个信号;
  • itemCollapsed(QTreeWidgetItem *item):这个信号是在折叠指定的元素而不显示其子项时发出的;
  • itemDoubleClicked(QTreeWidgetItem *item, int column):当用户在widget内部双击时,就会发出这个信号;
  • itemEntered(QTreeWidgetItem *item, int column):当鼠标光标在指定的列上输入一个项目时,就会发出这个信号。QTreeWidget鼠标跟踪需要启用此功能才能工作;
  • itemExpanded(QTreeWidgetItem *item):当指定项展开时,会发出此信号,以便显示其所有子项;
  • itemPressed(QTreeWidgetItem *item, int column):当用户在widget内按下鼠标按钮时,就会发出这个信号;
  • itemSelectionChanged():当树部件中的选择发生变化时,就会发出这个信号。可以通过selectedItems()找到当前选区;

QTreeWidgetItem
树小部件项用于保存树小部件的信息行。行通常包含几列数据,每列可以包含一个文本标签和一个图标。
QTreeWidgetItem类是一个方便类,它取代了QListViewItem类在Qt 3。它提供了一个与QTreeWidget类一起使用的项。

QTreeWidgetItem常用函数

  • addChild(QTreeWidgetItem *child):将子项添加到子项列表中;
  • addChildren(const QList<QTreeWidgetItem *> &children):将给定的子项列表附加到项上;
  • checkState(int column) const:返回给定列中标签的检查状态;
  • child(int index) const:返回子项列表中指定索引处的项;
  • childCount() const:返回子项的数量;
  • columnCount() const:返回项中的列数;
  • data(int column, int role) const:返回项的列和角色的值;
  • removeChild(QTreeWidgetItem *child):删除由child指定的给定项。被删除的项目不会被删除;
  • setData(int column, int role, const QVariant &value):设置项的列和角色的值为给定的值;
  • setExpanded(bool expand):如果expand为true,则展开项,否则折叠项;
  • setText(int column, const QString &text):将在给定列中显示的文本设置为给定文本;
  • takeChild(int index):删除索引处的项并返回,否则返回0;
  • treeWidget() const:返回包含该项的树部件;
  • setFlags(Qt::ItemFlags flags):将项的标志设置为给定的标志。它们决定了是否可以选择或修改;

图片示例

在这里插入图片描述

代码示例
QTreeWidgetDialog.h

#ifndef QTREEWIDGETDIALOG_H
#define QTREEWIDGETDIALOG_H#include <QDialog>
#include <QTreeWidgetItem>
namespace Ui
{class QTreeWidgetDialog;
}class QTreeWidgetDialog : public QDialog
{Q_OBJECTpublic:explicit QTreeWidgetDialog(QWidget* parent = nullptr);~QTreeWidgetDialog();void init();private slots:void on_add_clicked();void on_remove_clicked();void on_treeWidget_currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);void on_pushButton_clicked();void changeItemCaption(QTreeWidgetItem* item);private:Ui::QTreeWidgetDialog* ui;
};#endif // QTREEWIDGETDIALOG_H

QTreeWidgetDialog.cpp

#include "QTreeWidgetDialog.h"
#include "ui_QTreeWidgetDialog.h"
#include <QTreeWidget>
QTreeWidgetDialog::QTreeWidgetDialog(QWidget* parent): QDialog(parent), ui(new Ui::QTreeWidgetDialog)
{ui->setupUi(this);ui->treeWidget->clear();init();
}QTreeWidgetDialog::~QTreeWidgetDialog()
{delete ui;
}void QTreeWidgetDialog::init()
{QTreeWidgetItem* item = new QTreeWidgetItem(1001);QIcon icon;icon.addFile("");item->setIcon(0, icon);item->setText(0, "demo");item->setText(1, "type=1001");item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable|Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);item->setCheckState(0, Qt::Checked);item->setData(0, Qt::UserRole, QVariant("aaaa"));ui->treeWidget->addTopLevelItem(item);
}void QTreeWidgetDialog::on_add_clicked()
{QTreeWidgetItem* curItem = ui->treeWidget->currentItem();QTreeWidgetItem* newItem =  new QTreeWidgetItem(1002);QIcon icon;icon.addFile("");newItem->setIcon(0, icon);newItem->setText(0, "subdemo");newItem->setText(1, "type=1002");newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable|Qt::ItemIsEnabled | Qt::ItemIsAutoTristate);newItem->setCheckState(0, Qt::Checked);newItem->setData(0, Qt::UserRole, QVariant("aaaa"));curItem->addChild(newItem);
}void QTreeWidgetDialog::on_remove_clicked()
{//删除顶部节点// ui->treeWidget->takeTopLevelItem(0);QTreeWidgetItem* curItem = ui->treeWidget->currentItem();QTreeWidgetItem* parentItem = curItem->parent();parentItem->removeChild(curItem);delete curItem;
}//节点变化信号
void QTreeWidgetDialog::on_treeWidget_currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous)
{Q_UNUSED(previous);if(current == NULL) {return ;}int var = current->type();switch(var) {case 1001:ui->add->setEnabled(true);ui->remove->setEnabled(false);break;case 1002:ui->add->setEnabled(true);ui->remove->setEnabled(true);break;}
}//遍历节点
void QTreeWidgetDialog::on_pushButton_clicked()
{int count=ui->treeWidget->topLevelItemCount();for(int i=0; i<count; i++) {QTreeWidgetItem* item = ui->treeWidget->topLevelItem(i);changeItemCaption(item);}
}void QTreeWidgetDialog::changeItemCaption(QTreeWidgetItem* item)
{QString str = "*" +item->text(0);item->setText(0, str);int childCount = item->childCount();if(childCount > 0) {for(int i=0; i<childCount; i++) {changeItemCaption(item->child(i));}}
}

相关文章:

【嵌入式——QT】QTreeWidget

QTreeWidget类是创建和管理目录树结构的类&#xff0c;QTreeWidget每一个节点都是一个QTreeWidgetItem对象&#xff0c;添加一个节点前需先创建。QTreeWidget类是一个便利类&#xff0c;它提供了一个标准的树widget&#xff0c;具有经典的基于item的界面&#xff0c;类似于Qt 3…...

SQL 术语:Join 中的 Build 和 Probe 是什么意思?

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…...

HTTP头部信息解释分析(详细整理)

这篇文章为大家介绍了HTTP头部信息&#xff0c;中英文对比分析&#xff0c;还是比较全面的&#xff0c;若大家在使用过程中遇到不了解的&#xff0c;可以适当参考下 HTTP 头部解释 1. Accept&#xff1a;告诉WEB服务器自己接受什么介质类型&#xff0c;*/* 表示任何类型&#…...

探究短链接生成算法

1. 引言 在互联网时代&#xff0c;链接是连接用户和信息的桥梁&#xff0c;而长链接可能会因为过长、难记、不美观等问题影响用户体验&#xff0c;因此短链接的出现填补了这一空缺。短链接是将原始的长链接通过一定的算法转换成短字符串&#xff0c;从而实现了链接的简洁化&am…...

golang 实现http请求的调用,访问并读取页面数据和内置的一些方法

下午就不能好好学习一下golang&#xff0c;业务一直找个不停&#xff0c;自己定的业务规则都能忘得一干二净&#xff0c;让你查半天&#xff0c;完全是浪费时间。 golang实现访问并读取页面数据 package mainimport ("fmt""net/http" )var urls []string{…...

FFmpeg+OpenCV开发案例汇总

桌面共享工具&#xff08;软编版&#xff09; 桌面共享工具&#xff08;DXGI硬编版&#xff09; 智能广告大屏&#xff08;可叠加透明广告&#xff09; Android手机屏幕RTMP推流工具&#xff08;推麦克风版&#xff09; Android手机屏幕RTMP推流工具&#xff08;推扬声器版…...

PySide6+VSCode Python可视化环境搭建

pip install pyside6 下载本期源码 vscode装一个PYQT Integration插件&#xff0c;设置好两个路径&#xff08;下面有个脚本用于获取路径&#xff09; 用everything的童鞋注意了&#xff1a;工具/选项/索引/强制重建 重启vscode可以看到&#xff0c;右击.ui文件时出现可以操作…...

【设计】设计一个web版的数据库管理平台后端精要

需求 springboot设计开发一个系统&#xff0c;在这个系统的数据库表中存放着2000个数据库实例&#xff0c;有MySQL、Oracle、sql server3种数据库类型&#xff0c;用户可以在页面上选择不同的实例&#xff0c;连接这些实例上的数据库&#xff0c;来执行业务sql 实现 Service…...

没有硬件基础可以学单片机吗?

没有硬件基础可以学单片机吗&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升自己&#xff0c…...

ChatGPT引领的AI面试攻略系列:cuda和tensorRT

系列文章目录 cuda和tensorRT&#xff08;本文&#xff09;AI全栈工程师 文章目录 系列文章目录一、前言二、面试题1. CUDA编程基础2. CUDA编程进阶3. 性能优化4. TensorRT基础5. TensorRT进阶6. 实际应用与案例分析7. 编程与代码实践8. 高级话题与趋势 一、前言 随着人工智能…...

【战略前沿】人形机器人制造商Figure获得了OpenAI、Jeff Bezos、Nvidia和其他科技巨头的资助

原文&#xff1a;Humanoid robot-maker Figure gets funding from OpenAI, Jeff Bezos, Nvidia, and other tech giants 作者&#xff1a;ASSOCIATED PRESS ———————————————— Figure成立不到两年&#xff0c;还没有商业产品&#xff0c;但正在说服有影响力的…...

多块磁盘组磁盘离线导致VSAN存储崩溃的VSAN数据恢复案例

VSAN简介&#xff1a; VSAN是以vSphere内核为基础进行开发、可扩展的分布式存储架构。VSAN存储层由VSAN控制和管理&#xff0c;VSAN存储层是通过vSphere集群主机中闪存和硬盘的存储空间构建的&#xff0c;供vSphere集群使用的统一共享存储层。 VSAN存储是一个对象存储&#xff…...

Jenkins 的安装(详细教程)

文章目录 一、简介二、安装前准备三、windows 安装与启动1. 方式一2. 方式二3. 方式三 四、创建管理员用户五、常用设置1. 配置镜像地址2. 更改工作目录3. 开启可注册用户4. 全局变量配置 一、简介 官网&#xff1a;https://www.jenkins.io 中文文档&#xff1a;https://www.j…...

使用html网页播放多个视频的几种方法

前言 因为项目测试需要&#xff0c;我需要可以快速知道自己推流的多路视频流质量&#xff0c;于是我想到可以使用html网页来播放视频&#xff0c;实现效果极其简单&#xff0c;方法有好几种&#xff0c;以下是几种记录&#xff1a; 注意&#xff1a;测试过&#xff0c;VLC需要使…...

python 基础知识点(蓝桥杯python科目个人复习计划58)

今日复习内容&#xff1a;做题 例题1&#xff1a;仙境诅咒 问题描述&#xff1a; 在一片神秘的仙境中&#xff0c;有N位修仙者&#xff0c;他们各自在仙境中独立修炼&#xff0c;拥有他们独特的修炼之地和修炼之道&#xff0c;修炼者们彼此之间相互尊重&#xff0c;和平相处…...

【基于React实现共享单车管理系统】—React基础知识巩固(二)

【基于React实现共享单车管理系统】—React基础知识巩固&#xff08;二&#xff09; 一、React介绍 Facebook开源的一个JavaScript库React结合生态构成的一个MV*库 React的特点 Declarative&#xff08;声明式编码&#xff09;Component-Based&#xff08;组件化编码&#…...

云桥通+跨境电商:SDWAN企业组网优化跨境网络案例

跨境电商企业在全球范围内展开业务&#xff0c;需构建稳定高效的网络架构以支持其电商平台运营。云桥通SDWAN企业组网技术为跨境电商提供网络连接和管理的优化&#xff0c;提升网络性能、可靠性和安全性。以下是一家跨境电商企业的SDWAN组网案例&#xff0c;详细介绍其实施情况…...

服务器有几种http强制跳转https设置方法

目前为站点安装SSL证书开启https加密访问已经是件很简单的事了&#xff0c;主要是免费SSL证书的普及&#xff0c;为大家提供了很好的基础。 Apache环境下如何http强制跳转https访问。Nginx环境下一般是通过修改“你的域名.conf”文件来实现的。 而Apache环境下通过修改.htacces…...

web坦克大战小游戏

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的订阅后,私信本人,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、贪吃蛇、飞机大战、坦克大战、开心消消乐、扑鱼达人、扫雷、打地鼠、斗地主等等。 <!DOCTYPE htm…...

如何使用生成式人工智能探索视频博客的魅力?

视频博客&#xff0c;尤其是关于旅游的视频博客&#xff0c;为观众提供了一种全新的探索世界的方式。通过图像和声音的结合&#xff0c;观众可以身临其境地体验到旅行的乐趣和发现的喜悦。而对于内容创作者来说&#xff0c;旅游视频博客不仅能分享他们的旅行故事&#xff0c;还…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...