QTreeWidget——信号处理

news2025/1/24 11:48:36

文章目录

  • 基本属性
  • 信号
    • 一、信号种类
    • 二、信号测试
      • 1、currentItemChanged、itemCollapsed、itemExpanded三个信号的测试
      • 2、itemActivated信号
      • 3、 itemChanged信号
      • 4、其余信号的测试代码(包含以上代码)

基本属性

信号

一、信号种类

//当前项发生变化时触发,使用后不会触发itemClicked、itemDoubleClicked这两个信号,支持鼠标和键盘触发
void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)

//伸展子项和收缩子项
void itemCollapsed(QTreeWidgetItem *item)
void itemExpanded(QTreeWidgetItem *item)

//激活项时触发
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 itemSelectionChanged()

二、信号测试

1、currentItemChanged、itemCollapsed、itemExpanded三个信号的测试

测试效果:

在这里插入图片描述在这里插入图片描述
部分测试代码

int MainWindow::setTreeItem()
{
    //关掉默认的展开图标
    ui->m_treeWidget->setRootIsDecorated(false);

    QFont font("黑体",16);

    //创建一级父类项
    QTreeWidgetItem *item_parent = new QTreeWidgetItem(ui->m_treeWidget);
    item_parent->setIcon(0,QIcon(":/new/prefix1/picture/Down.png"));

    //设置一列数据
    ui->m_treeWidget->setColumnCount(1);
    item_parent->setFont(0,font);
    //item_parent->setTextColor(0,Qt::white);
    item_parent->setText(0,QString::fromLocal8Bit("设备信息"));

    //添加二级项
    QTreeWidgetItem *item_child = new QTreeWidgetItem(item_parent);
    item_child->setIcon(0,QIcon(":/new/prefix1/picture/AP.png"));
    item_child->setTextAlignment(0,Qt::AlignLeft | Qt::AlignVCenter);
    item_child->setText(0,QString::fromLocal8Bit("设备一"));
    item_child->setSelected(false);

    //所选项的展开与收缩信号
    connect(ui->m_treeWidget,SIGNAL(itemExpanded(QTreeWidgetItem *)),this,
            SLOT(On_DouClickedTreeOpen_Slots(QTreeWidgetItem *)));
    connect(ui->m_treeWidget,SIGNAL(itemCollapsed(QTreeWidgetItem *)),this,
            SLOT(On_DouClickedTreeClose_Slots(QTreeWidgetItem *)));


    connect(ui->m_treeWidget,SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),this,
            SLOT(On_CurrentItemChanged_Slots(QTreeWidgetItem *,QTreeWidgetItem *)));

    return 0;
}

void MainWindow::On_DouClickedTreeClose_Slots(QTreeWidgetItem *item)
{
    item->setIcon(0,QIcon(":/new/prefix1/picture/Down.png"));
}

void MainWindow::On_CurrentItemChanged_Slots(QTreeWidgetItem *curren, QTreeWidgetItem *previous)
{
    if(previous != NULL)
     qDebug()<<curren->text(0)<<previous->text(0);
}

void MainWindow::On_DouClickedTreeOpen_Slots(QTreeWidgetItem *item)
{
    item->setIcon(0,QIcon(":/new/prefix1/picture/Up.png"));
}

子项伸展和收缩的应用测试
在这里插入图片描述

void MainWindow::init()
{
    //关闭头部信息
    ui->m_treeWidget->header()->setVisible(false);

    //关掉默认的展开图标
    ui->m_treeWidget->setRootIsDecorated(false);

    //初始qtree的宽高
    ui->m_treeWidget->setFixedSize(T_WIDTH,T_HEIGHT);

    //禁用滑动块
    ui->m_treeWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->m_treeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    setTreeItem();
}

int MainWindow::setTreeItem()
{
    QFont font("黑体",16);

    //创建一级父类项
    QTreeWidgetItem *item_parent = new QTreeWidgetItem(ui->m_treeWidget);

    item_parent->setSizeHint(0,QSize(C_WIDTH,C_HEIGHT));

    item_parent->setIcon(0,QIcon(":/new/prefix1/picture/Down.png"));

    //设置一列数据
    ui->m_treeWidget->setColumnCount(1);
    item_parent->setFont(0,font);

    item_parent->setText(0,QString::fromLocal8Bit("设备信息"));

    //设置对齐方式
    item_parent->setTextAlignment(0,Qt::AlignVCenter);
    addChildItem(item_parent);

    //所选项的展开与收缩信号
    connect(ui->m_treeWidget,SIGNAL(itemExpanded(QTreeWidgetItem *)),this,
            SLOT(On_DouClickedTreeOpen_Slots(QTreeWidgetItem *)));
    connect(ui->m_treeWidget,SIGNAL(itemCollapsed(QTreeWidgetItem *)),this,
            SLOT(On_DouClickedTreeClose_Slots(QTreeWidgetItem *)));


    connect(ui->m_treeWidget,SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),this,
            SLOT(On_CurrentItemChanged_Slots(QTreeWidgetItem *,QTreeWidgetItem *)));
    return 0;
}
void MainWindow::On_DouClickedTreeOpen_Slots(QTreeWidgetItem *item)
{
    if(item->text(0) == QString::fromLocal8Bit("设备信息"))
    {
        item->setIcon(0,QIcon(":/new/prefix1/picture/Up.png"));

        //根据子节点数目更新宽度
        int num = item->childCount();
        if(num > 0)
        {
            int h = num * C_HEIGHT + T_HEIGHT;
            ui->m_treeWidget->setFixedSize(T_WIDTH,h);
        }
    }


}
void MainWindow::On_DouClickedTreeClose_Slots(QTreeWidgetItem *item)
{
    if(item->text(0) == QString::fromLocal8Bit("设备信息"))
    {
        item->setIcon(0,QIcon(":/new/prefix1/picture/Down.png"));

        //回复默认宽高
        ui->m_treeWidget->setFixedSize(T_WIDTH,T_HEIGHT);
    }
}

2、itemActivated信号

效果图:
在这里插入图片描述测试鼠标双击控制和使用键盘的Enter触发

3、 itemChanged信号

测试发现只对一级节点的触发有响应,这里关闭了所有项的默认图标

//QSS:关闭子项的默认图标
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
border-image: none;
image: none;
}

QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings {
border-image: none;
image: none;
}

效果图:

在这里插入图片描述

4、其余信号的测试代码(包含以上代码)

void MainWindow::init()
{
    //关闭头部信息
    ui->m_treeWidget->header()->setVisible(false);

    //关掉默认的展开图标
    ui->m_treeWidget->setRootIsDecorated(false);

    //初始qtree的宽高
    ui->m_treeWidget->setFixedSize(T_WIDTH,T_HEIGHT);

    //禁用滑动块
    ui->m_treeWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->m_treeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    setTreeItem();
}

int MainWindow::setTreeItem()
{
    QFont font("黑体",16);

    //创建一级父类项
    QTreeWidgetItem *item_parent = new QTreeWidgetItem(ui->m_treeWidget);

    item_parent->setSizeHint(0,QSize(C_WIDTH,C_HEIGHT));

    item_parent->setIcon(0,QIcon(":/new/prefix1/picture/Down.png"));

    //设置一列数据
    ui->m_treeWidget->setColumnCount(1);
    item_parent->setFont(0,font);

    item_parent->setText(0,QString::fromLocal8Bit("设备信息"));

    //设置对齐方式
    item_parent->setTextAlignment(0,Qt::AlignVCenter);
    addChildItem(item_parent);

    //所选项的展开与收缩信号
    connect(ui->m_treeWidget,SIGNAL(itemExpanded(QTreeWidgetItem *)),this,
            SLOT(On_DouClickedTreeOpen_Slots(QTreeWidgetItem *)));
    connect(ui->m_treeWidget,SIGNAL(itemCollapsed(QTreeWidgetItem *)),this,
            SLOT(On_DouClickedTreeClose_Slots(QTreeWidgetItem *)));


    connect(ui->m_treeWidget,SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),this,
            SLOT(On_CurrentItemChanged_Slots(QTreeWidgetItem *,QTreeWidgetItem *)));

    connect(ui->m_treeWidget,SIGNAL(itemActivated(QTreeWidgetItem *, int)),this,
            SLOT(On_ItemActivated_Slots(QTreeWidgetItem *,int)));

    connect(ui->m_treeWidget,SIGNAL(itemChanged(QTreeWidgetItem *, int)),this,
            SLOT(On_ItemChanged_Slot(QTreeWidgetItem *,int)));

    //itemClicked
    connect(ui->m_treeWidget,SIGNAL(itemClicked(QTreeWidgetItem *, int)),this,
            SLOT(On_ItemClicked_Slots(QTreeWidgetItem *,int)));

    connect(ui->m_treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),this,
            SLOT(On_ItemDoubleClicked_Slots(QTreeWidgetItem *,int)));

    connect(ui->m_treeWidget,SIGNAL(itemPressed(QTreeWidgetItem *, int)),this,
            SLOT(On_ItemPressed_Slots(QTreeWidgetItem *,int)));


    connect(ui->m_treeWidget,SIGNAL(itemSelectionChanged()),this,
            SLOT(On_ItemSelectionChanged_Slots()));

    return 0;
}

/**
 * @brief MainWindow::addChildItem 添加二级子项
 * @param parentItem
 */
void MainWindow::addChildItem(QTreeWidgetItem *parentItem)
{
    //添加二级项,为了是效果更加明显多添加几个子节点
    for(int i = 0;i < 6;i++)
    {
        QTreeWidgetItem *item_child = new QTreeWidgetItem(parentItem);
        //itemActivated

        item_child->setSizeHint(0,QSize(C_WIDTH,C_HEIGHT));
        item_child->setIcon(0,QIcon(":/new/prefix1/picture/AP.png"));
        item_child->setTextAlignment(0,Qt::AlignLeft | Qt::AlignVCenter);
        QString test_str = QString::fromLocal8Bit("设备_");
        test_str.append(QString::number(i));
        item_child->setText(0,test_str);
        QTreeWidgetItem *item_child_child = new QTreeWidgetItem(item_child);
        item_child_child->setSizeHint(0,QSize(C_WIDTH,C_HEIGHT));

        item_child_child->setTextAlignment(0,Qt::AlignLeft | Qt::AlignVCenter);
        //item_child->setIcon(0,QIcon(":/new/prefix1/picture/AP.png"));

        item_child_child->setText(0,QString::fromLocal8Bit("信息"));
    }
}

void MainWindow::On_ItemSelectionChanged_Slots()
{
     qDebug()<<QString::fromLocal8Bit("当前项发生改变");
}

void MainWindow::On_DouClickedTreeClose_Slots(QTreeWidgetItem *item)
{
    if(item->text(0) == QString::fromLocal8Bit("设备信息"))
    {
        item->setIcon(0,QIcon(":/new/prefix1/picture/Down.png"));

        //回复默认宽高
        ui->m_treeWidget->setFixedSize(T_WIDTH,T_HEIGHT);
    }
}

void MainWindow::On_ItemActivated_Slots(QTreeWidgetItem *item, int n)
{
    //qDebug()<<item->text(0)<<n;
}

void MainWindow::On_ItemChanged_Slot(QTreeWidgetItem *item, int n)
{
    qDebug()<<item->text(0)<<n;
}

void MainWindow::On_ItemClicked_Slots(QTreeWidgetItem *item, int n)
{
    qDebug()<<QString::fromLocal8Bit("单击")<<item->text(0)<<n;
}

void MainWindow::On_ItemDoubleClicked_Slots(QTreeWidgetItem *item, int n)
{
    qDebug()<<QString::fromLocal8Bit("双击")<<item->text(0)<<n;
}

void MainWindow::On_ItemPressed_Slots(QTreeWidgetItem *item, int n)
{
    qDebug()<<QString::fromLocal8Bit("按下")<<item->text(0)<<n;
}

void MainWindow::On_CurrentItemChanged_Slots(QTreeWidgetItem *curren, QTreeWidgetItem *previous)
{
      //这里做判断是防止代码初始化时出错,因为初始化时previous == NULL
    //    if(previous != NULL)
    //     qDebug()<<curren->text(0)<<previous->text(0);
}

void MainWindow::On_DouClickedTreeOpen_Slots(QTreeWidgetItem *item)
{
    if(item->text(0) == QString::fromLocal8Bit("设备信息"))
    {
        item->setIcon(0,QIcon(":/new/prefix1/picture/Up.png"));

        //根据子节点数目更新宽度
        int num = item->childCount();
        if(num > 0)
        {
            int h = num * C_HEIGHT + T_HEIGHT;
            ui->m_treeWidget->setFixedSize(T_WIDTH,h);
        }
    }


}```

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

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

相关文章

Docker容器与虚拟化技术:Dockerfile部署LNMP

目录 一、理论 1.LNMP架构 2.背景 3.Dockerfile部署LNMP 3.构建Nginx镜像 4.构建MySQL容器 5.构建PHP镜像 6.启动 wordpress 服务 二、实验 1.环境准备 2.构建Nginx镜像 3.构建MySQL容器 4.构建PHP镜像 5.启动 wordpress 服务 三、问题 1.构建nginx镜像报错 …

库克发文庆祝苹果入华 30 周年

8月18日&#xff0c;苹果CEO蒂姆库克在微博上发布了一条庆祝苹果进入中国30周年的消息&#xff0c;称“我们衷心感谢所有的同事、顾客和合作伙伴&#xff01;” 此外&#xff0c;苹果官方新闻稿也发文庆祝入华 30 周年&#xff0c;库克在新闻稿中表示&#xff1a;“30 年来&am…

公文处理101:高效率的文件管理与优化流程

公文处理是每个企业和机构中不可或缺的日常工作。对公文的高效管理和流程优化不仅能提高工作效率&#xff0c;还能确保文件的安全、准确和及时性。本文为你提供一套公文处理的基础知识和技巧。 1.文件分类与归档 重要性&#xff1a;结构化的文件分类可以确保每个文档都能迅速找…

财务数据分析模板有哪些,能满足决策吗?

虽然企业的业务经营各有不同&#xff0c;但在财务数据分析上却有着相似的需求与流程&#xff0c;因此财务数据分析是可以形成一套标准化模板的。奥威BI数据可视化工具从多年丰富的BI项目中总结经验&#xff0c;形成一套标准化、系统化的财务数据分析模板&#xff0c;内含资产负…

比较20组迭代次数的大小36-12

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让A有3个点&#xff0c;B有1个点&#xff0c;排列组合&#xff0c;统计迭代次数并排序。 其中有20组数据 差值结构 迭代次数 构造平均列A 平均列A …

labelme安装以及标注自己的目标检测数据集

目录 一、labelme安装指令 二、使用教程 三、 快捷键 一、labelme安装指令 winR之后在弹出的对话框中输入cmd按回车进入终端 conda activate 虚拟环境名称 pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple/ 二、使用教程 安装成功之后在终端输入label…

支持多种推送方式的消息推送设计方案

文章目录 1 摘要2 消息推送架构3 数据库设计脚本4 核心代码4.1 消息推送业务实现4.2 消息重试推送 5 可优化思路6 Github 源码 1 摘要 通过邮件、短信等方式向用户发送通知是一项很常见的业务场景。如何设计一套好用、简洁消息推送架构&#xff1f;这是一个问题。本文将介绍一…

AI绘画小程序源码:创业的新机遇

随着AI绘画的兴起&#xff0c;人们对于这项技术的需求与日俱增。现有的小程序和AI绘图软件已经无法满足用户的画图需求&#xff0c;经常出现排队等待的情况&#xff0c;甚至有些人需要等上数小时&#xff0c;或者面对长达数万人的排队队伍。 因此&#xff0c;我们迫切需要新的、…

排污口水质在线监测,实时掌握排口水质助力生态治理

水是生命之源&#xff0c;良好的水生态环境是社会发展的必然要求。然而随着工业化和城市化的发展&#xff0c;人类面临空气和水环境污染等严峻挑战&#xff0c;其中水环境问题尤为突出。排污成为城市和工业生产过程中不可避免的环保问题。 为加快解决生态环境突出问题&#xff…

SparkSQL源码分析系列02-编译环境准备

本文主要描述一些阅读Spark源码环境的准备工作&#xff0c;会涉及到源码编译&#xff0c;插件安装等。 1. 克隆代码。 打开IDEA&#xff0c;在Git下的Clone中&#xff0c;输入 https://github.com/apache/spark&#xff0c;克隆代码到本地&#xff0c;CheckOut到目标版本Spar…

音视频FAQ(一):视频直播卡顿

一、摘要 本文介绍了视频直播卡顿的四个主要原因&#xff0c;用户网络问题、用户设备性能问题、技术路线的选择和实现问题。因本文主要阐述视频直播的卡顿&#xff0c;故技术路线的实现指的是&#xff1a;CDN供应商的实现问题&#xff0c;包含CDN性能不足、CDN地区覆盖不足。对…

修复由于找不到vcruntime140.dll,无法继续执行代码的问题

前段时间时间Office软件出现故障&#xff0c;但是由于一个项目没有做完&#xff0c;就没有卸载重新安装。刚抽时间卸载了Office2019&#xff0c;然后发现CAD、NX、Comsol等软件打开的时候报错&#xff1a;“由于找不到vcruntime140.dll 无法继续执行”。 于是我推测是刚才卸载…

数据集成中的关键挑战与策略:数据安全与隐私保护

在互联网的普及和信息技术的发展下&#xff0c;数据集成成为了现代社会中各个领域中不可或缺的任务。数据集成是指将来自不同数据源的数据整合到一个统一的数据集中&#xff0c;以便进行进一步的分析和利用。然而&#xff0c;由于数据的多样性和复杂性&#xff0c;数据集成过程…

git 开发环境配置

系统&#xff1a;Mac OS 1、下载git&#xff0c;官网已经推荐使用命令下载。 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh) 2、验证git是否安装成功 git --version 3、配置本地git全局变量 git config --global user.n…

面试题-React(三):什么是JSX?它与常规JavaScript有什么不同?

在React的世界中&#xff0c;JSX是一项引人注目的技术&#xff0c;它允许开发者在JavaScript中嵌套类似HTML的标签&#xff0c;用于描述UI组件的结构。本篇博客将通过丰富的代码示例&#xff0c;深入探索JSX语法&#xff0c;解析其在React中的用法和优势。 一、JSX基础语法 在…

决策准则之赫维兹准则、萨维奇遗憾准则、拉普拉斯不充分理由准则、沃尔德准则

一、Hurwicz criteria(赫维兹准则) 赫维兹准则是一种决策准则&#xff0c;用于在不确定条件下进行决策。考虑决策者对不同结果的态度&#xff0c;通过调整“乐观度参数”(optimism parameter)来权衡最优和最坏结果的可能性。 “乐观度参数”在0到1之间取值&#xff1a; 当乐…

推特群推王:引爆您的产品

作为出海市场的营销平台&#xff0c;Twitter的流量不断攀升&#xff0c;已然成为跨境贸易企业的一部分。当前&#xff0c;Twitter已不再是一个简单的社交平台&#xff0c;而是一个强大的营销平台&#xff0c;使企业能够与受众实时互动。然而&#xff0c;与其他社交媒体一样&…

springboot数据库密码加密的配置方法_Java

前言 由于系统安全的考虑&#xff0c;配置文件中不能出现明文密码的问题&#xff0c;本文就给大家详细介绍下springboot配置数据库密码加密的方法&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍吧 1.导入依赖 <!--数据库密码加密--> <dependency>&…

密码学学习笔记(十九):密码学关键术语的解释1

数据加密标准(DES) 数据加密标准是使用最广泛的加密体制&#xff0c;它于1977年被美国国家标准和技术研究所(NIST)采纳为联邦信息处理标准FIPS PUB 46。 DES3DESAES明文分组长度&#xff08;位&#xff09;6464128密文分组长度&#xff08;位&#xff09;6464128密钥长度&…

Spring-4-掌握Spring事务传播机制

今日目标 能够掌握Spring事务配置 Spring事务管理 1 Spring事务简介【重点】 1.1 Spring事务作用 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败 Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据库操作同成功同失败 1.2 案例分析Spring…