当前位置: 首页 > 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;还…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...