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_NAMESPACE

namespace Ui { class Widget; }

QT_END_NAMESPACE



class Widget : public QWidget

{

    Q_OBJECT



public:

    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 300

    tree->move(100, 100);    // 设置控件在窗口中的位置为 (100, 100)



    tree->setColumnCount(2);                           // 设置列数为 2

    tree->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);

    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ELK技术介绍:背景、功能及应用场景全面解析

一、ELK概述 ELK是由Elasticsearch、Logstash和Kibana三个开源软件组成的日志管理解决方案&#xff0c;这一组合在近年来得到了广泛的关注和应用。ELK的出现&#xff0c;源于大数据和云计算技术的快速发展&#xff0c;以及对高效日志管理的迫切需求。 随着企业信息化程度…

Nginx 配置 SSL(HTTPS)详解

Nginx作为一款高性能的HTTP和反向代理服务器&#xff0c;自然支持SSL/TLS加密通信。本文将详细介绍如何在Nginx中配置SSL&#xff0c;实现HTTPS的访问。 随着互联网安全性的日益重要&#xff0c;HTTPS协议逐渐成为网站加密通信的标配。Nginx作为一款高性能的HTTP和反向代理服务…

6、ES单机设置用户名密码、集群设置用户名密码、es-head登录、如何去掉密码

目录 一、ES单节点密码配置1、修改配置文件2、 重启es服务3&#xff0c;执行修改密码命令4、访问服务 二、ES集群密码配置1、确定主节点2、生成elastic-stack-ca.p123、生成elastic-certificates.p124、修改配置文件并重启集群5、进行密码配置6、验证 三、es-head登录增加密码的…

ABAP json解析使用引用代替预定义数据结构

背景&#xff1a;在解析JSON数据时&#xff0c;通常会事先为定义相应的ABAP数据结构。但是&#xff0c;当遇到一些结构纵深较为复杂的情况时&#xff0c;会比较麻烦。 处理&#xff1a;使用引用类型来定义结构中的纵深部分来达到“省事”的目的&#xff0c;缺点在于访问时需要使…

Docker——开源的应用容器的引擎

目录 一、前言 1.虚拟化产品有哪些 1.1寄居架构 1.2源生架构 2.虚拟化产品对比/介绍 2.1虚拟化产品 2.1.1仿真虚拟化 2.1.2半虚拟化 2.1.3全虚拟化 2.2重点 2.2.1KVM——Linux内核来完成的功能和性能 2.2.2ESXI——用的比较多 二、Docker概述 1.Docker定义 2.Do…

赋能智慧校园!A3D数字孪生可视化,轻量又高效!

放假之后&#xff0c;学生们会逐步返学&#xff0c;大量人员出入校园&#xff0c;安全更是不容忽视&#xff0c;如何在短时间内对大批人员及设施进行智能监管&#xff1f;数字化转型是关键手段&#xff0c;我们可以融合线上线下数据&#xff0c;搭建3D立体的智慧校园&#xff0…

智能合约——提案demo

目录 这是一个超超超级简单的智能合约提案项目&#xff0c;你确定不点进来看一下吗&#xff1f; 引言&#xff1a; 1、搭建开发环境&#xff1a; 2、编写智能合约&#xff1a; 3、部署智能合约&#xff1a; ​编辑​编辑4、编写前端交互代码&#xff08;使用web3.js&…

MyBatis源码之MyBatis中SQL语句执行过程

MyBatis源码之MyBatis中SQL语句执行过程 SQL执行入口 我们在使用MyBatis编程时有两种方式&#xff1a; 方式一代码如下&#xff1a; SqlSession sqlSession sqlSessionFactory.openSession(); List<Student> studentList sqlSession.selectList("com.sjdwz.da…

C语言——自定义数据类型(结构体内存对齐)

C语言中不只有内置类型诸如 int 、float、char 等类型&#xff0c;还有自定义数据类型&#xff0c;本文主要探讨结构体&#xff08;struct&#xff09;、联合体&#xff08;union&#xff09;、枚举&#xff08;enum&#xff09;三种自定义数据类型。 在我之前的文章《C语言—…

WPF2 样式布局

样式布局 WPF中的各类控件元素, 都可以自由的设置其样式。 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Margin) 水平位置(HorizontalAlignment) 垂直位置(VerticalAlignment) 等等。 而样式则是组织和重用以上的重要工具。…

解码Linux中的Shell:一探脚本起源、发展与变量数据类型之奥秘

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 2、什么是Shell脚本 3、Sh…

MySQL面试——聚簇/非聚簇索引

存储引擎是针对表结构&#xff0c;不是数据库 引擎层&#xff1a;对数据层以何种方式进行组织 update&#xff1a;加索引&#xff1a;行级锁&#xff1b;不加索引&#xff1a;表级锁

LabVIEW专栏七、队列

目录 一、队列范例二、命令簇三、队列应用1.1、并行循环队列1.2、命名队列和匿名队列1.2.1、命名队列1.2.2、匿名队列 1.3、长度为1的队列 队列是一种特殊的线性表&#xff0c;就是队列里的元素都是按照顺序进出。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为…

HNCTF 2022 week1 题解

自由才是生活主旋律。 [HNCTF 2022 Week1] Interesting_include <?php //WEB手要懂得搜索 //flag in ./flag.phpif(isset($_GET[filter])){$file $_GET[filter];if(!preg_match("/flag/i", $file)){die("error");}include($file); }else{highlight_…

OSPF的协议特性

路由汇总的概念 l 路由汇总&#xff08; Route Aggregation &#xff09;&#xff0c;又称路由聚合&#xff08;Route Summarization&#xff09;&#xff0c;指的是把一组明细路由汇聚成一条汇总路由条目的操作 l 路由汇总能够减少路由条目数量、减小路由表规模&#xff0…

目标检测——3D玩具数据集

在数字化时代&#xff0c;计算机视觉技术取得了长足的进展&#xff0c;其中基于形状的3D物体识别技术更是引起了广泛关注。该技术不仅有助于提升计算机对现实世界物体的感知能力&#xff0c;还在多个领域展现出了广阔的应用前景。本文将探讨基于形状的3D物体识别实验的重要性意…

STM32的Flash读写保护

参考链接 STM32的Flash读写保护&#xff0c;SWD引脚锁的各种解决办法汇总&#xff08;2020-03-10&#xff09;-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1597959 STM32系列芯片Flash解除写保护的办法 - 知乎 (zhihu.com)https://zh…

Java设计模式:使用责任链模式和状态模式优化‘审批流程‘

Java设计模式&#xff1a;使用责任链模式和状态模式优化审批流程 摘要引言 需求流程图正文内容&#x1f4d0; 基本概念介绍 功能实现示例1:设计模式&#xff1a;责任链模式方法&#xff1a;好处&#xff1a; 示例2:设计模式&#xff1a;责任链模式方法和操作流程&#xff1a;好…

mongodb 分片集群认证

增加认证 副本间认证外部使用认证 如果是开启状态,先关闭路由,再关闭配置服务,最后关闭分片数据复本集中的每个mongod&#xff0c;从次节点开始。直到副本集的所 有成员都离线&#xff0c;包括任何仲裁者。主节点必须是最后一个成员关闭以避免潜在的回滚.最好通过 db.shutdow…

Spring Bean 的生命周期与作用域解析及实战

引言 在Spring框架中&#xff0c;Bean是构成应用的核心组件&#xff0c;它们负责执行应用中的业务逻辑。理解Spring Bean的生命周期和作用域对于开发高效、稳定的Spring应用至关重要。本文将详细解析Spring Bean的生命周期和作用域&#xff0c;并通过实战案例加深理解。 一、…