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,一经查实,立即删除!

相关文章

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

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

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

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

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;玩一玩了…

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

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

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;响应式原理、双向绑定实现、虚…

【八股】Java基础、集合、JVM

面向对象三大特性 1 封装&#xff1a; 将 方法 和 属性 写到同一个类中&#xff0c;并将属性 私有化&#xff0c;生成 get set方法&#xff0c;外部访问属性需要通过get和set方法,内部可以直接访问属性&#xff0c;这样的一个类我们认为它完成了封装。 2 继承&#xff1a; 子…

【Linux系统编程】第九弹---权限管理操作(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、目录权限 2、粘滞位 总结 1、目录权限 首先提出一个问题&#xff0c;删除一个文件需要什么权限呢&#xff1f;&#xff1f…

视频美颜SDK原理与实践:从算法到应用

当下&#xff0c;从社交媒体到视频通话&#xff0c;人们越来越依赖于视频美颜功能来提升自己的形象。而视频美颜SDK作为支撑这一技术的重要工具&#xff0c;其原理和实践至关重要。 一、什么是视频美颜SDK&#xff1f; 视频美颜SDK是一种软件开发工具包&#xff0c;用于集成到…

python文件 成绩分析

‘’文件score.txt中存储了学生的考试信息,内容如下 小明,98 小刚,90 小红,91 小王,98 小刘,80 请写代码,读取文件数据,并进行如下分析 最高分和最低分分别是多少&#xff1f;得最高分的学生有几个&#xff1f; 得最低分的学生有几个平均分是多少&#xff1f; ‘’’ def rea…

【linux】基础IO(软硬链接)

上一节我们已经搞懂了已经被打开的文件&#xff0c;还有没有被打开的文件都是怎样被管理起来的&#xff0c;同样&#xff0c;路径的重要性也不言而喻&#xff0c;是确定文件在那个分区&#xff0c;进而可以解析到目标文件与目录内容的关系&#xff0c;从而找到inode&#xff0c…

【可下载】CDA 一级 2024最新模拟题一(全网最详细有答案)

CDA一级考试的考查内容相当基础&#xff0c;考试内容涵盖了多个关键领域&#xff0c;包括数据分析的基本概念、数据结构的理解、数据库的基础知识、描述性统计分析的方法、多维数据透视分析的技巧、业务数据分析的实践应用&#xff0c;以及业务分析报告与数据可视化报表的制作。…

C++: IO流

目录 1、C语言输入输出 流的概念&#xff1a; 2、CIO流 3、C文件IO流 1、C语言输入输出 C语言中我们用到的最频繁的输入输出方式就是scanf () 与 printf() 。 scanf(): 从标准输入设备 ( 键 盘 ) 读取数据&#xff0c;并将值存放在变量中 。 printf(): 将指定的文…

基于STM32的蓝牙小车(虚拟串口模拟)的Proteus仿真

文章目录 一、前言二、仿真图1.要求2.思路3.画图3.1 电源部分3.2 超声波测距部分3.3 电机驱动部分3.4 按键部分3.5 蓝牙部分3.6 显示屏部分3.7 整体 4.仿真5.软件 三、总结 一、前言 proteus本身并不支持蓝牙仿真&#xff0c;这里我采用虚拟串口的方式来模拟蓝牙控制。 这里给…