qt QTreeWidget 学习

树形控件的节点可以有多层、多个子节点, 如果将子节点全部展开,那么每一行都是一个数据条目。QTreeWidgetItem 比较特殊,一个条目内部可以有多列数据信息,相当于表格控件一整行的表格单元集成为一个条目。

 默认情况下,树形控件最上面是一个树头条目,树头条目也是 QTreeWidgetItem 对象,可以有多列内容。

树头下面是真正的树形控件所有条目,在折叠的情况下,如上图所示,每行一个顶级条目,顶级条目也是 QTreeWidgetItem 对象,顶级条目的父节点指针 QTreeWidgetItem::​parent() 为 NULL

QTreeWidget

顶级条目进行计数

int QTreeWidget::​topLevelItemCount() const

获取顶级条目

QTreeWidgetItem *topLevelItem(int index) const;

添加顶级条目

void addTopLevelItem(QTreeWidgetItem *item);

移除顶级条目

QTreeWidgetItem *takeTopLevelItem(int index);

清空所有的顶级条目和子条目

 void clear();

获取当前高亮选中条目的函数为

 QTreeWidgetItem *currentItem() const;

设置某个条目为当前选中的状态

void setCurrentItem(QTreeWidgetItem *item);

当前高亮选中的状态发生变化,会触发如下信号

void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);

QTreeWidgetItem

获取某列的数据

QString text(int column)

virtual QVariant data(int column, int role) const;

设置某列的数据

void setText(int column, const QString &text)

virtual void setData(int column, int role, const QVariant &value);

获取某列图标

inline QIcon icon(int column) const

设置某列图标

inline void setIcon(int column, const QIcon &icon);

添加子项

void addChild(QTreeWidgetItem *child);

void addChildren(const QList<QTreeWidgetItem*> &children);

当前条目的操作

QTreeWidgetItem *currentItem() const;   //获取当前高亮选中条目

int currentColumn() const;   //当前条目被点击选中的列号

void setCurrentItem(QTreeWidgetItem *item); //设置某个条目为当前选中的状态

常用的信号

如果当前高亮选中的状态发生变化

void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);

void itemActivated(QTreeWidgetItem * item, int column) //条目列被激活

void itemChanged(QTreeWidgetItem * item, int column)   //条目列的数据发生变化,比如文本或图标修改了

void itemClicked(QTreeWidgetItem * item, int column)  //条目列被单击

void itemDoubleClicked(QTreeWidgetItem * item, int column) //条目列被双击

void itemEntered(QTreeWidgetItem * item, int column) //进入条目列

void itemPressed(QTreeWidgetItem * item, int column) //条目列被点击按下

void QTreeWidget::​itemExpanded(QTreeWidgetItem * item)  //条目展开时发送信号

void QTreeWidget::​itemCollapsed(QTreeWidgetItem * item) //条目折叠时发送信号

代码例子

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QTreeWidget>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass Widget : public QWidget{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void createtree();QTreeWidget *tree;public slots:void curItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);void itemselected(QTreeWidgetItem *item,int column);public:void setselected(QTreeWidgetItem *item,Qt::CheckState state);private:Ui::Widget *ui;};#endif // WIDGET_H#include "widget.h"#include "ui_widget.h"#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);createtree();}Widget::~Widget(){delete ui;}void Widget::createtree(){tree = new QTreeWidget(this);tree->resize(400, 300);  // 设置控件大小为 400 x 300tree->move(100, 100);    // 设置控件在窗口中的位置为 (100, 100)tree->setColumnCount(2);                           // 设置列数为 2tree->setHeaderLabels({"Name", "Value"});          // 设置列标题为 "Name" 和 "Value"QTreeWidgetItem *root = new QTreeWidgetItem(tree);   // 创建一个根节点root->setText(0, "Root");                            // 设置节点文本root->setText(1, "0");                               // 设置节点文本root->setCheckState(0,Qt::Checked);tree->addTopLevelItem(root);                         // 将节点添加到 QTreeWidget 中QTreeWidgetItem *child1 = new QTreeWidgetItem(root); // 创建一个子节点child1->setText(0, "Child 1");                       // 设置节点文本child1->setText(1,"10"); // 设置节点文本''child1->setCheckState(0,Qt::Checked);root->addChild(child1); // 将节点添加到根节点下QTreeWidgetItem *child11 = new QTreeWidgetItem(child1); // 创建一个子节点child11->setText(0, "Child 11");                       // 设置节点文本child11->setText(1,"100"); // 设置节点文本''child11->setCheckState(0,Qt::Checked);child1->addChild(child11); // 将节点添加到根节点下QTreeWidgetItem *child2 = new QTreeWidgetItem(root); // 创建一个子节点child2->setText(0, "Child 2");                       // 设置节点文本child2->setText(1,"20"); // 设置节点文本child2->setCheckState(0,Qt::Checked);root->addChild(child2); // 将节点添加到根节点下connect(tree,SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem*)),this,SLOT(curItemChanged(QTreeWidgetItem *, QTreeWidgetItem*)));connect(tree,SIGNAL(itemClicked(QTreeWidgetItem *,int)),this,SLOT(itemselected(QTreeWidgetItem *,int)));tree->show();}void Widget::curItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous){if(current != nullptr){qDebug() << current->text(0);}}void Widget::itemselected(QTreeWidgetItem *item,int column){if(column == 0){Qt::CheckState state = item->checkState(0);if(state == Qt::Checked || state == Qt::Unchecked){setselected(item,state);}}}void Widget::setselected(QTreeWidgetItem *item,Qt::CheckState state ){int ncount = item->childCount();for(int i = 0; i <ncount; i++){QTreeWidgetItem *child = item->child(i);child->setCheckState(0,state);if(child->childCount() > 0)setselected(child,state);}}

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

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

相关文章

Linux笔记之本地安装(用户安装)目录和系统安装目录

Linux笔记之本地安装(用户安装)目录和系统安装目录 —— 2024-04-20 杭州 code review! 文章目录 Linux笔记之本地安装(用户安装)目录和系统安装目录1.区别解释说明&#xff1a;1. /usr/local/include 和 /usr/include2. /usr/local/bin 和 /usr/bin3. /usr/local/lib 和 /u…

XiaodiSec day007 Learn Note 小迪安全学习笔记

XiaodiSec day007 Learn Note 小迪安全学习笔记 记录得比较凌乱&#xff0c;不尽详细 07 2023.12.31 cms识别 资产泄漏&#xff0c;资产即为网站的资源&#xff0c;了解到网站使用了那种cms对信息收集很有帮助 使用工具识别cms 识别cms后可以进行代码审计&#xff0c;或…

怎么保存微信视频号中的视频,赶紧看过来教你下载视频号里的视频!

视频内容已成为我们获取信息和娱乐的重要方式。微信视频号作为新兴的短视频平台&#xff0c;汇聚了丰富多样的创作&#xff0c;但有时我们希望将喜欢的视频保存到本地以便离线观看或分享给朋友。那么&#xff0c;视频号里的视频如何下载呢&#xff1f;别急&#xff0c;本文将详…

CCRC-DSO学员分享:数据安全官——导师与朋友的双重身份

我叫杜刚。在过去的几年里&#xff0c;我一直从事政企业务的工作&#xff0c;主要以网络安全业务为主导。尽管我已经有多年的政企与网络安全的工作经验&#xff0c;但我始终认为&#xff0c;不断学习和提升自己的专业能力是至关重要的。这就是我考取CCRC-DSO数据安全官证书的原…

面试题总结第二弹

一.Volatile为什么不保证原子性&#xff1f; 因为它实际上是三个操作组成的一个复合操作。 首先获取volatile变量的值&#xff0c;将该变量的值加1&#xff0c;将该volatile变量的值写会到对应的主存地址。而原子性指的是一个或多个操作在CPU执行的过程中不会被中断的特…

11 - 在k8s官方文档上,经常搜索不到内容的问题

使用k8s官方文档时&#xff0c;会出现首页可以正常打开&#xff0c;但是输入搜索关键字之后&#xff0c;搜索不到内容的情况&#xff0c;如下图&#xff1a; 这是由于相关搜索组件被墙的原因&#xff0c;处理方法如下&#xff1a; 谷歌浏览器&#xff1a; 火狐浏览器&#x…

大模型实战—通义千问大模型微调

通义千问大模型微调 在之前的文章中&#xff0c;我分享了一些使用大语言模型开发应用的方法&#xff0c;也介绍了几个开源大语言模型的部署方式&#xff0c; 有同学给我留言说想知道怎么训练自己的大语言模型&#xff0c;让它更贴合自己的业务场景。完整的大语言模型训练成本…

springBoot集成seata实现分布式事务

背景 日常开发离不开分布式系统&#xff0c;自然避免不了分布式事务问题&#xff0c;Seata 是一款阿里开源的主流分布式事务解决方案&#xff0c;但实际工作引入seata感觉有点重&#xff0c;本人之前在商业银行做开发也很少团队使用。今天趁此机会做个demo&#xff0c;玩一玩了…

关系运算符

介绍 关系运算符的结果都是 boolean 型&#xff0c; 也就是要么是 true&#xff0c; 要么是 false关系表达式 经常用在 if 结构的条件中或循环结构的条件中 运算符运算范例结果相等于89false!不等于8!9true<小于8<9true<小于等于8<9true>大于8>9false>大…

使用shared lib将各个构建工具集成到一起

共享库代码 package devopsdef Build(buildType, buildShell){def buildTools ["mvn": "MVN", "ant": "ANT", "gradle": "GRADLE"]println("当前buildType是${buildType}")buildHome tool buildTool…

使用itext7为pdf文档添加水印

iText7是一款功能强大的开源PDF处理库&#xff0c;用于创建、编辑和处理PDF文档。相比于iTextSharp&#xff0c;iText7具有更先进的功能和更好的性能。 添加水印是iText7的一个常见应用场景。水印可以用于保护文档的版权&#xff0c;标识文档的状态或来源等。使用iText7添加水…

Idea修改【Help->Edit Custom VM Options...】后,导致idea无法正常启动的解决方法

一、错误场景: 二、解决方法&#xff1a; 修改文件路径&#xff1a;C:\Users\tianjm&#xff08;写自己的用户名&#xff09;\AppData\Roaming\JetBrains\IdeaIC2024.1&#xff08;选自己安装的版本&#xff09;

用友GRP-U8 operOriztion SQL注入漏洞复现

前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、产…

selenium 下载文件取消安全下载的方法

问题描述 我要从一个网站上下载文件&#xff0c;谷歌浏览器总是自动阻止下载&#xff0c;并询问我是否保留。 可是&#xff0c;我想要的是不要询问&#xff0c;默认下载即可。 运行环境 OS: macOSselenium: 4.19.0python: 3.10.11Chrome: 124.0.6367.62selenium chromedrive…

powerdesigner如何显示表备注、表字段备注

一、显示表的 comment 选择菜单 Tools->Display Preferences,选中 “Table”,勾选 “Commen” 二、显示列的 comment

OpenAI 和 Moderna 合作,推进 mRNA 医学

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、关于 Moderna Moderna 是 mRNA 医学领域的佼佼者&#xff0c;其通过不断推动 mRNA 技术的发展&#xff0c;正在重塑药物的制造方式&#xff0c;并深刻地改变我们治疗和预防疾病的方法。凭借在科学、…

Vue.js 3 应用开发与核心源码解析 阅读笔记

https://www.dedao.cn/ebook/reader?idV5R16yPmaYOMqGRAv82jkX4KDe175w7xRQ0rbx6pNgznl9VZPLJQyEBodb89mqoO 2022年出的书&#xff0c;针对Vue的版本是3.2.28&#xff0c;当前的版本是 3.4.21。 本书的一大特色是对Vue 3.x的核心源码&#xff08;响应式原理、双向绑定实现、虚…

tailwind免费模版

搜索合集 https://www.tailwindawesome.com/?pricefree&typetemplate Floatui: https://floatui.com/templates 适合做主页 3.Preline: https://preline.co/examples.html 4.hyperui&#xff1a;https://www.hyperui.dev/ 5.Merakiui: https://merakiui.com/template…

国外的代码签名证书公司可以用吗?

在今天的互联网时代&#xff0c;代码签名证书对于软件开发者和用户来说是至关重要的。代码签名证书是由数字签名技术实现的&#xff0c;用于验证软件开发者身份并保证软件的完整性和可信性。由于代码签名证书的重要性&#xff0c;国外的代码签名证书公司也成为了市场的一部分。…

JAVA学习-行为抽象和Lambda.收集器

在 Java 中&#xff0c;行为抽象和 Lambda 表达式通常用于函数式编程的范式。Java 8 引入了函数式接口和 Lambda 表达式&#xff0c;使得在处理集合数据时更加灵活和简洁。而收集器&#xff08;Collector&#xff09;则是 Java 8 Stream API 提供的一种机制&#xff0c;用于将 …