QTreeWidget

news2024/11/25 9:02:01

一、基本要点

1、QTreeWidgetItem 是 Qt 开发框架中的一个重要组件,它主要用于表示树形视图中的节点。在 QTreeWidget 这样的控件中,每个节点都是 QTreeWidgetItem 的实例,可以包含文本、图标以及其他数据。

2、connect 是Qt中的一个重要函数,用于在Python版本的Qt应用中建立连接(Connection),使得当某个信号(Signal)发出时,会自动调用相应的槽(Slot)。这是事件驱动编程的核心,允许组件之间的通信,比如按钮点击触发回调函数处理。

QObject.connect(sender, signal, receiver, slot)的基本语法如下:

  • sender: 发出信号的对象,也称为源对象。
  • signal: 需要监听的信号,通常是对象方法返回前后的状态改变,如按钮的clicked()信号。
  • receiver: 接受信号的对象,也称为目标对象。
  • slot: 指定在接收信号时要执行的槽函数,通常是目标对象的方法。
  • 3、在Qt 的设计器中拖曳...出一个QTreeWidget.
  • MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        init();
        connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem *,int)));
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::init()
    {
        ui->treeWidget->clear(); //清空widgettree
    
        QTreeWidgetItem *group1 = new QTreeWidgetItem(ui->treeWidget);
        group1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
        group1->setCheckState(0,Qt::Unchecked);
        group1->setText(0,"group1");
        QTreeWidgetItem *subItem11 = new QTreeWidgetItem(group1);
        subItem11->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
        subItem11->setCheckState(0,Qt::Unchecked);
        subItem11->setText(0,"老普");
        QFont font;
        font.setPointSize(32);//通过设置字体大小来自动设置高度
        subItem11->setFont(0,font);
        QTreeWidgetItem *subItem12 = new QTreeWidgetItem(group1);
        subItem12->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
        subItem12->setCheckState(0,Qt::Unchecked);
        subItem12->setText(0,"大毛");
        QTreeWidgetItem *group2 = new QTreeWidgetItem(ui->treeWidget);
        group2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
        group2->setCheckState(0,Qt::Unchecked);
        group2->setText(0,"group2");
    
        QTreeWidgetItem *subItem21 = new QTreeWidgetItem(group2);
        subItem21->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
        subItem21->setCheckState(0,Qt::Unchecked);
        subItem21->setText(0,"司机");
        QTreeWidgetItem *subItem22 = new QTreeWidgetItem(group2);
        subItem22->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
        subItem22->setCheckState(0,Qt::Unchecked);
        subItem22->setText(0,"二毛");
        QTreeWidgetItem *subItem23 = new QTreeWidgetItem(group2);
        subItem23->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
        subItem23->setCheckState(0,Qt::Unchecked);
        subItem23->setText(0,"炮灰");
    }
    void MainWindow::updateParentItem(QTreeWidgetItem *item)
    {
        //子节点选择情况来更新父节点的选框情况
        QTreeWidgetItem *parent = item->parent();
        if(parent==NULL)
        {
            return ;
        }
        int selectedCount = 0;
        int childCount = parent->childCount();
        for(int i=0;i<childCount;i++)
        {
            QTreeWidgetItem *childItem = parent->child(i);
            if(childItem->checkState(0)==Qt::Checked)
                selectedCount++;
    
        }
        if(selectedCount<=0)
        {
            parent->setCheckState(0,Qt::Unchecked);
        }
        else if(selectedCount>0 && selectedCount<childCount)
            parent->setCheckState(0,Qt::PartiallyChecked);
        else
            parent->setCheckState(0,Qt::Checked);
    
    }
    void MainWindow::treeItemChanged(QTreeWidgetItem *item,int column)
    {
        qDebug()<<" item change column:"<<column<<endl;
        QString itemText = item->text(0);
        if(Qt::Checked == item->checkState(0))
        {
            QTreeWidgetItem *parent = item->parent();
            int count = item->childCount();
            qDebug()<<"child count:"<<count<<endl;
            if(count>0)
            {
                for(int i=0; i< count;i++)
                    item->child(i)->setCheckState(0,Qt::Checked);
            }
            else
                updateParentItem(item);
        }
        else if(Qt::Unchecked == item->checkState(0))
        {
            QTreeWidgetItem *parent = item->parent();
            int count = item->childCount();
            qDebug()<<"child count:"<<count<<endl;
            if(count>0)
            {
                for(int i=0; i< count;i++)
                    item->child(i)->setCheckState(0,Qt::Unchecked);
            }
            else {
                updateParentItem(item);
            }
        }
    
    
    }
    
    运行效果:

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

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

相关文章

Crackmapexec一键检测网络环境(KALI工具系列四十四)

目录 1、KALI LINUX 简介 2、Crackmapexec工具介绍 3、信息收集 3.1 目标IP 3.2 kali的IP 4、操作步骤 4.1 帮助命令 4.2 扫描网段 4.3 验证访问 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版 &#xff0c;广泛用于网络安全社区。它…

蓝卓油气行业解决方案

我国是全球最大的能源消费国&#xff0c;保障国家能源安全是我国能源发展的首要任务&#xff0c;油气作为我国能源体系的重要组成部分&#xff0c;是支撑我国工业和经济社会发展的基础和“压舱石&#xff0c;也是必须筑牢的能源安全底线。 蓝卓根据油气田行业发展趋势&#xf…

Linux中六种常见工具

一、软件包管理器yum 1、yum概念 yum是一个软件下载安装管理的客户端&#xff0c;例如手机上的小米一应用商城。 那为什么我们推荐在Linux中用yum下载软件呢&#xff1f; 其实软件的安装有三种方式&#xff1a;源代码安装&#xff0c;rpm包安装&#xff0c;yum安装。 a、源…

STM32 HRTIM生成PWM时遇到无法输出PWM脉冲波形问题

在使用HRTIM生成PWM时&#xff0c;当把周期寄存器更新的设置放到while循环中时&#xff0c;无法输出PWM脉冲波形&#xff0c;即使增加计数延时也无法输出&#xff0c;最终只能放到中断函数中执行后期寄存器值更新才能够生成PWM脉冲波形。

【XSS】

文章目录 0x01 简介0x02 XSS Payload用法XSS攻击平台及调试JavaScript 0x03 XSS构造技巧XSS漏洞防御策略 跨站脚本攻击&#xff0c;Cross Site Script。&#xff08;重点在于脚本script&#xff09; 分类 反射型、存储型DOM型 漏洞原理&#xff1a;通过插入script篡改“HTML”…

单片机设计_自行车码表(AT89C51, LCD1602, DS1302,霍尔传感器)

想要更多项目私wo!!! 一、电路设计 系统采用51单片机LCD1602液晶DS1302时钟模块霍尔传感器电机按键模块蜂鸣器报警模块设计而成。 产品自带单片机上电复位电路、手动复位电路&#xff08;复位按键&#xff09;、晶振电路&#xff08;给单片机提供时钟周期&#xff09;。 …

下载安装VSCode并添加插件作为仓颉编程入门编辑器

VSCode下载地址&#xff1a;下载 Visual Studio Code - Mac、Linux、Windows 插件下载&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 仓颉社区中下载解压 cangjie.vsix 插件 打开VSCode 按 Ctrl Shift X 弹出下图 按照上图步骤依次点击选中我们下…

网络编程+文件上传操作的理解

前言&#xff1a; 概述:在网络通信协议下,不同计算机上运行的程序,进行数据传输 比如:通信,视频通话,网游,邮件等 只要是计算机之间通过网络进行数据传输,就有网络编程的存在 &#xff08;下面单纯是在Java基础中了解了一下网络编程&#xff0c;感觉理…

深度学习 | CNN 基本原理

目录 1 什么是 CNN2 输入层3 卷积层3.1 卷积操作3.2 Padding 零填充3.3 处理彩色图像 4 池化层4.1 池化操作4.2 池化的平移不变性 5 全连接层6 输出层 前言 这篇博客不够详细&#xff0c;因为没有介绍卷积操作的具体计算&#xff1b;但是它介绍了 CNN 各层次的功能…

08 模型演化根本 深度学习推荐算法的五大范式

易经》“九三&#xff1a;君于终日乾乾&#xff1b;夕惕若&#xff0c;厉无咎”。九三是指阳爻在卦中处于第三位&#xff0c;已经到达中位&#xff0c;惕龙指这个阶段逐渐理性&#xff0c;德才已经显现&#xff0c;会引人注目&#xff1b;但要反思自己的不足&#xff0c;努力不…

昇思25天学习打卡营|MQ(mindquantum)编程实践

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) 安装 Packages # 安装 mindquantum, networkx !pip install mindquantum -i https://pypi.mirrors.ustc.edu.cn/simple !pip install networkx -i https://pypi.mirrors.ustc.edu.cn/simple 安装…

脸书登录指南:如何在同一台设备登录多个Facebook账号?

海外社媒营销人员和跨境卖家现在越来越依赖社交媒体平台来拓展业务和接触潜在客户&#xff0c;尤其是Facebook。然而&#xff0c;在进行脸书登录时&#xff0c;你可能会问&#xff1a;如何在同一台设备上登录多个Facebook账号&#xff0c;而不违反Facebook的使用条款&#xff1…

指针与数组笔试题解析

文章目录 1.一维数组1.1 整型数组1.2 字符数组 2. 二维数组3.指针笔试题3.1 练习13.2 练习23.3 练习3 数组名的意义&#xff1a; 1.sizeof(数组名)&#xff0c;这里的数组表示整个数组&#xff0c;计算的整个数组的大小 2.&数组名&#xff0c;这里的数组名表示整个数组的&a…

【Diffusion学习】【生成式AI】Stable Diffusion、DALL-E、Imagen 背後共同的套路

文章目录 图片生成Framework 需要3个组件&#xff1a;相关论文【Stable Diffusion&#xff0c;DALL-E&#xff0c;Imagen】 具体介绍三个组件1. Text encoder介绍【结论&#xff1a;文字的encoder重要&#xff0c;Diffusion的模型不是很重要&#xff01;】评估指标&#xff1a;…

用go实现限流算法

文章目录 固定窗口优缺点&#xff1a;适用场景&#xff1a;总结&#xff1a; 滑动窗口优缺点&#xff1a;适用场景&#xff1a;总结&#xff1a; 漏桶限流器优缺点&#xff1a;适用场景&#xff1a;总结&#xff1a; 令牌桶优缺点&#xff1a;适用场景&#xff1a;总结&#xf…

定义损失函数并以此训练和评估模型

基础神经网络模型搭建 【Pytorch】数据集的加载和处理&#xff08;一&#xff09; 【Pytorch】数据集的加载和处理&#xff08;二&#xff09; 损失函数计算模型输出和目标之间的距离。通过torch.nn 包可以定义一个负对数似然损失函数&#xff0c;负对数似然损失对于训练具有多…

炎炎夏日,这份锂电AGV叉车保养指南赶紧收藏!

AGV 随着工厂自动化、计算机集成制造系统技术的逐步发展以及柔性制造系统、自动化立体仓库的广泛应用&#xff0c;AGV(Automatic GuidedVehicle)即自动导引车作为联系和调节离散型物流系统以使其作业连续化的必要的自动化搬运装卸手段&#xff0c;其应用范围和技术水平得到了迅…

云服务器实际内存与购买不足量问题

君衍 一、本篇缘由二、问题研究1、dmidecode2、dmesg | grep -i memory 三、kdump四、解决方案1、卸载kdump-tools2、清理依赖包3、修改配置文件4、重新生成配置文件5、重启服务器6、再次查看 一、本篇缘由 本篇由于最近买了云服务器&#xff0c;之前基本在本地使用VMware进行虚…

初识单片机之点亮LED灯

1、前言 如果说编程的开始是Hello world,那么单片机的开始就是点亮LED灯&#xff0c;这个操作最直接的展示了单片机强大的控制功能&#xff0c;这里我就以直接点亮指定位置的LED灯的形式演示这个功能。 2、原理介绍 我的单片机的LED灯都是接在单片机的P1口&#xff0c;从P10~P…

【数据结构(邓俊辉)学习笔记】高级搜索树02——B树

文章目录 1. 大数据1.1 640 KB1.2 越来越大的数据1.3 越来越小的内存1.4 一秒与一天1.5 分级I/O1.6 1B 1KB 2. 结构2.1 观察体验2.2 多路平衡2.3 还是I/O2.4 深度统一2.5 阶次含义2.6 紧凑表示2.7 BTNode2.8 BTree 3. 查找3.1 算法过程3.2 操作实例3.3 算法实现3.4 主次成本3.…