QTreeWidget开放详解

QTreeWidget开放详解

  • 一、创建 QTreeWidget
  • 二、QTreeWidget添加节点
    • 2.1 创建 QTreeWidget 和 添加顶级节点
    • 2.2 QTreeWidget向顶级节点添加子节点
  • 二、 QTreeWidget处理信号和槽
    • 2.1 处理节点点击信号
    • 2.1 处理节点双击信号
    • 2.3 处理节点展开和折叠信号
  • 三、QTreeWidget右键菜单
  • 四、QTreeWidget拖拽操作
  • 五、 QTreeWidget编辑节点

使用 QTreeWidget 开发时,涉及到的主要知识点包括创建树结构、添加节点、处理信号和槽、定制显示、以及处理右键菜单等。以下是一些常用的开发知识点和示例代码。

一、创建 QTreeWidget

QTreeWidget *treeWidget = new QTreeWidget(this);
treeWidget->setColumnCount(2);
QStringList headers;
headers << "Name" << "Value";
treeWidget->setHeaderLabels(headers);

二、QTreeWidget添加节点

在 QTreeWidget 中添加节点可以通过 QTreeWidgetItem 来实现。你可以向 QTreeWidget 添加顶级节点,或者向某个节点添加子节点。下面是一个详细的示例,演示了如何在 QTreeWidget 中添加节点。

2.1 创建 QTreeWidget 和 添加顶级节点

首先,我们需要创建一个 QTreeWidget 对象,并添加顶级节点:

QTreeWidget *treeWidget = new QTreeWidget(this);
treeWidget->setColumnCount(2);
QStringList headers;
headers << "Name" << "Value";
treeWidget->setHeaderLabels(headers);// 添加顶级节点
QTreeWidgetItem *rootItem = new QTreeWidgetItem(treeWidget);
rootItem->setText(0, "Root");
rootItem->setText(1, "Root Value");

2.2 QTreeWidget向顶级节点添加子节点

你可以向 QTreeWidgetItem 添加子节点:

// 添加子节点
QTreeWidgetItem *childItem1 = new QTreeWidgetItem(rootItem);
childItem1->setText(0, "Child 1");
childItem1->setText(1, "Value 1");QTreeWidgetItem *childItem2 = new QTreeWidgetItem(rootItem);
childItem2->setText(0, "Child 2");
childItem2->setText(1, "Value 2");

二、 QTreeWidget处理信号和槽

QTreeWidget 中处理信号和槽是与其他 Qt 小部件类似的。你可以连接各种信号到槽函数以响应用户的交互,例如节点点击、双击、展开和折叠等。下面是一些常见的信号和槽的使用示例:

2.1 处理节点点击信号

你可以连接 QTreeWidget::itemClicked 信号到一个槽函数,当用户点击某个节点时触发该槽函数。

#include <QtWidgets>class MyTreeWidget : public QTreeWidget {Q_OBJECTpublic:MyTreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent) {setColumnCount(2);QStringList headers;headers << "Name" << "Value";setHeaderLabels(headers);// 添加顶级节点QTreeWidgetItem *rootItem = new QTreeWidgetItem(this);rootItem->setText(0, "Root");rootItem->setText(1, "Root Value");// 添加子节点QTreeWidgetItem *childItem1 = new QTreeWidgetItem(rootItem);childItem1->setText(0, "Child 1");childItem1->setText(1, "Value 1");QTreeWidgetItem *childItem2 = new QTreeWidgetItem(rootItem);childItem2->setText(0, "Child 2");childItem2->setText(1, "Value 2");// 连接信号和槽connect(this, &QTreeWidget::itemClicked, this, &MyTreeWidget::onItemClicked);// 展开所有节点expandAll();}private slots:void onItemClicked(QTreeWidgetItem *item, int column) {qDebug() << "Item clicked: " << item->text(column);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyTreeWidget treeWidget;treeWidget.show();return app.exec();
}

2.1 处理节点双击信号

你可以连接 QTreeWidget::itemDoubleClicked 信号到一个槽函数,当用户双击某个节点时触发该槽函数。

#include <QtWidgets>class MyTreeWidget : public QTreeWidget {Q_OBJECTpublic:MyTreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent) {setColumnCount(2);QStringList headers;headers << "Name" << "Value";setHeaderLabels(headers);// 添加顶级节点QTreeWidgetItem *rootItem = new QTreeWidgetItem(this);rootItem->setText(0, "Root");rootItem->setText(1, "Root Value");// 添加子节点QTreeWidgetItem *childItem1 = new QTreeWidgetItem(rootItem);childItem1->setText(0, "Child 1");childItem1->setText(1, "Value 1");QTreeWidgetItem *childItem2 = new QTreeWidgetItem(rootItem);childItem2->setText(0, "Child 2");childItem2->setText(1, "Value 2");// 连接信号和槽connect(this, &QTreeWidget::itemDoubleClicked, this, &MyTreeWidget::onItemDoubleClicked);// 展开所有节点expandAll();}private slots:void onItemDoubleClicked(QTreeWidgetItem *item, int column) {qDebug() << "Item double-clicked: " << item->text(column);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyTreeWidget treeWidget;treeWidget.show();return app.exec();
}

2.3 处理节点展开和折叠信号

你可以连接 QTreeWidget::itemExpandedQTreeWidget::itemCollapsed 信号到槽函数,当节点被展开或折叠时触发这些槽函数。

#include <QtWidgets>class MyTreeWidget : public QTreeWidget {Q_OBJECTpublic:MyTreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent) {setColumnCount(2);QStringList headers;headers << "Name" << "Value";setHeaderLabels(headers);// 添加顶级节点QTreeWidgetItem *rootItem = new QTreeWidgetItem(this);rootItem->setText(0, "Root");rootItem->setText(1, "Root Value");// 添加子节点QTreeWidgetItem *childItem1 = new QTreeWidgetItem(rootItem);childItem1->setText(0, "Child 1");childItem1->setText(1, "Value 1");QTreeWidgetItem *childItem2 = new QTreeWidgetItem(rootItem);childItem2->setText(0, "Child 2");childItem2->setText(1, "Value 2");// 连接信号和槽connect(this, &QTreeWidget::itemExpanded, this, &MyTreeWidget::onItemExpanded);connect(this, &QTreeWidget::itemCollapsed, this, &MyTreeWidget::onItemCollapsed);// 展开所有节点expandAll();}private slots:void onItemExpanded(QTreeWidgetItem *item) {qDebug() << "Item expanded: " << item->text(0);}void onItemCollapsed(QTreeWidgetItem *item) {qDebug() << "Item collapsed: " << item->text(0);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyTreeWidget treeWidget;treeWidget.show();return app.exec();
}

三、QTreeWidget右键菜单

同样地,可以在 QTreeWidget 上实现右键菜单操作。以下是一个示例:

class MyTreeWidget : public QTreeWidget {
public:MyTreeWidget(QWidget *parent = nullptr) : QTreeWidget(parent) {setContextMenuPolicy(Qt::CustomContextMenu);connect(this, &QTreeWidget::customContextMenuRequested, this, &MyTreeWidget::showContextMenu);}private:void showContextMenu(const QPoint &pos) {QTreeWidgetItem *item = itemAt(pos);if (!item) return;QMenu contextMenu(tr("Context menu"), this);QAction *action1 = new QAction("Action 1", this);connect(action1, &QAction::triggered, this, [this, item]() { action1Clicked(item); });contextMenu.addAction(action1);QAction *action2 = new QAction("Action 2", this);connect(action2, &QAction::triggered, this, [this, item]() { action2Clicked(item); });contextMenu.addAction(action2);contextMenu.exec(mapToGlobal(pos));}void action1Clicked(QTreeWidgetItem *item) {qDebug() << "Action 1 clicked on item: " << item->text(0);}void action2Clicked(QTreeWidgetItem *item) {qDebug() << "Action 2 clicked on item: " << item->text(0);}
};

四、QTreeWidget拖拽操作

启用拖拽操作:

treeWidget->setDragEnabled(true);
treeWidget->setAcceptDrops(true);
treeWidget->setDropIndicatorShown(true);
treeWidget->setDragDropMode(QAbstractItemView::InternalMove);

五、 QTreeWidget编辑节点

设置节点为可编辑:

QTreeWidgetItem *editableItem = new QTreeWidgetItem(treeWidget);
editableItem->setFlags(editableItem->flags() | Qt::ItemIsEditable);
treeWidget->editItem(editableItem, 0);

其他QT文章
1. QT开发环境安装以配置。
2. QT线段画板实战
3. 半小时玩转QT桌面系统托盘(含托盘消息)
4. QT入门开发一个时钟
5. 半小时教你做大转盘游戏(QT篇)
6. 手把手教你制作【带吸附效果的线段绘制】(QT)
7. 手把手教你开发-滚动效果号码抽奖(QT)
8. 100行代码实现贪吃蛇小游戏
9.C++实现《扫雷》游戏(入门经典)
10. svg转图片工具开发
11. Qt网路与通信(获取本机网络信息)
12. Qt网路与通信(UDP客户与服务)
13. Qt网络与通信(TCP聊天室)
14. Qt多线程以及线程池
15. Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例
16. 取色器(QT)
17. MQTT客户端入门开发
18.QT文件上传带进度条实例(含源码)
19. Qt音乐播放器开发实例(可毕设含源码)
20. Qt学生管理系统-- 数据库课程设计(付源码)

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

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

相关文章

鸿蒙应用框架开发【多HAP】程序框架

多HAP 介绍 本示例展示多HAP开发&#xff0c;简单介绍了多HAP的使用场景&#xff0c;应用包含了一个entry HAP和两个feature HAP&#xff0c;两个feature HAP分别提供了音频和视频播放组件&#xff0c;entry中使用了音频和视频播放组件。 三个模块需要安装三个hap包&#xff…

高性能响应式UI部件DevExtreme v24.1.4全新发布

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

Pycharm中提示:SDK is not defined for Run Configuration

此问题发生在使用Pycharm打开一个新的python的工程&#xff0c;结果总是提示XXX’时出错&#xff0c; SDK is not defined for Run Configuration 此问题&#xff0c;其实是个由于你的工程中没有设置python解释器导致的&#xff0c;解决的方案是&#xff1a; 找到运行->编…

Javascript前端面试基础4【每日学习并更新10】

同步和异步的区别 同步:浏览器访问服务器请求&#xff0c;用户看得到页面刷新&#xff0c;重新发请求等请求完&#xff0c;页面刷新,新内容出现&#xff0c;用户看到新内容,进行下一步操作异步:浏览器访问服务器请求&#xff0c;用户正常操作&#xff0c;浏览器后端进行请求。等…

玩游戏总缺少dll文件怎么办,免费修复DirectX方法

玩游戏或者运行程序时&#xff0c;突然蹦出个提示说“缺少xxxx.dll”&#xff0c;简直让人火大&#xff01;你是不是也遇到过这种情况&#xff0c;重新安装游戏也没用&#xff0c;各种错误提示让人崩溃&#xff1f;别急&#xff0c;阿星今天就来给你支个招&#xff0c;让这烦人…

电子签章-开放签应用

开放签电子签章系统开源工具版旨在将电子签章、电子合同系统开发中的前后端核心技术开源开放&#xff0c;适合有技术能力的个人 / 团队学习或自建电子签章 \ 电子合同功能或应用&#xff0c;避免研发同仁在工作过程中重复造轮子&#xff0c;降低电子签章技术研发要求&#xff0…

Spring源码学习笔记之@Async源码

文章目录 一、简介二、异步任务Async的使用方法2.1、第一步、配置类上加EnableAsync注解2.2、第二步、自定义线程池2.2.1、方法一、不配置自定义线程池使用默认线程池2.2.2、方法二、使用AsyncConfigurer指定线程池2.2.3、方法三、使用自定义的线程池Excutor2.2.4、方法四、使用…

7.25 阿里云OSS上传 + 后台返回token + 导出excel

1.阿里云Oss上传 只需要一点就是上传到云端后&#xff0c;前端调用上传文件接口&#xff0c;返回一个资源路径。 接着在提交表单时&#xff0c;前端把这个路径设置为img的参数即可。 1.1上传限制 只上传图片 Api("阿里云文件管理") CrossOrigin //跨域 RestContr…

算法 定长按组翻转链表

一、题目 已知一个链表的头部head&#xff0c;每k个结点为一组&#xff0c;按组翻转。要求返回翻转后的头部 k是一个正整数&#xff0c;它的值小于等于链表长度。如果节点总数不是k的整数倍&#xff0c;则剩余的结点保留原来的顺序。示例如下&#xff1a; &#xff08;要求不…

谷粒商城实战笔记-60-商品服务-API-品牌管理-效果优化与快速显示开关

文章目录 一&#xff0c;显示状态列改为switch开关二&#xff0c;监听状态改变 首先&#xff0c;把ESLint语法检查关掉&#xff0c;因为这个语法检查过于严格&#xff0c;在控制台输出很多错误信息&#xff0c;干扰开发。 在build目录下下webpack.base.conf.js中&#xff0c;把…

昇思MindSpore学习总结十七 —— 基于MindSpore通过GPT实现情感分类

1、要求 2、导入了一些必要的库和模块 以便在使用MindSpore和MindNLP进行深度学习任务时能使用各种功能&#xff0c;比如数据集处理、模型训练、评估和回调功能。 import os # 导入操作系统相关功能的模块&#xff0c;如文件和目录操作import mindspore # 导入MindSpore库&a…

数据开发/数仓工程师上手指南(二)数仓构建分层概念

前言 回顾上篇文章我们可以用思维导图一遍概览&#xff1a; 在了解了数仓的基本架构之后&#xff0c;我们还需要掌握数仓构建方法&#xff0c;也就是了解数仓是如何建模的&#xff0c;有什么规则和通用方法。我们应该如何去构建一个性能良好、稳定高效、契合业务的数据仓库。…

Windows图形界面(GUI)-MFC-C/C++ - Dialog

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 Dialog 创建对话框模板 设置对话框属性 创建对话框对象 对话框生命周期 示例代码 Dialog 创建对话框模板 流程 打开资源视图&#xff1a;在Visual Studio中&#xff0c;右键点击资…

图形/视图架构的坐标系

图形/视图架构有 3 个有效的坐标系&#xff1a;场景坐标系、视图坐标系、图形项坐标系。 视图坐标系 视图坐标系就是视图组件的物理坐标系&#xff0c;单位是像素。QGraphicsView 视口的左上角坐标总是(0,0)。 场景坐标系 场景坐标系定义了所有图形项的基础坐标&#xff0c;场…

如何排查GD32 MCU复位是由哪个复位源导致的?

上期为大家讲解了GD32 MCU复位包括电源复位和系统复位&#xff0c;其中系统复位还包括独立看门狗复位、内核软复位、窗口看门狗复位等&#xff0c;在一个GD32系统中&#xff0c;如果莫名其妙产生了MCU复位&#xff0c;如何排查具体是由哪个复位源导致的呢&#xff1f; GD32 MC…

Idea如何查看Maven依赖树

1、使用idea自带的功能查看依赖树 2、使用Maven Helper插件 https://zhuanlan.zhihu.com/p/699663369

docker -v 到底和那个一样?type=volume还是type=bind的解释

逐行通俗详细的解释下这个代码“#!/usr/bin/env bash # # This script will automatically pull docker image from DockerHub, and start a daemon container to run the Qwen-Chat web-demo.IMAGE_NAMEqwenllm/qwen:2-cu121 QWEN_CHECKPOINT_PATH/path/to/Qwen-Instruct PORT…

《Milvus Cloud向量数据库指南》——监管机构和社区:开源许可证标准的守护者与推动者

在开源软件的浩瀚宇宙中,监管机构和社区构成了其稳定运行与持续发展的双轮驱动。这些组织不仅定义了开源的本质,还通过制定、维护和执行许可证标准,确保了开源生态的开放性、透明性和协作精神得以传承。其中,开源倡议组织(OSI)、自由软件基金会(FSF)以及Apache软件基金…

【STM32】IIC学习笔记

学习IIC 前言一、基础知识GPIO_WriteBit 写入高低电平 二、放代码三、逐行细读总结 前言 最近沉迷手写笔记~ 尝试解读江科大的IIC程序&#xff0c;结合笔记更理解IIC 一、基础知识 GPIO_WriteBit 写入高低电平 二、放代码 这个是江科大的软件IIC的设置部分 #include "s…

【C++】C++中查找并替换字符串中的特定单个字符、多个字符、中文字符

目录 一.替换单个字符 方法1&#xff1a;使用循环遍历字符串 方法2&#xff1a;使用 std::replace 算法 二.替换字符串中的中文字符 1.检查字符串中是否包含中文逗号 2.替换字符串中的中文逗号 3.遍历字符串并打印中文逗号 三.替换字符串中的多个字符 一.替换单个字符 …