QTreeWidget——信号处理

文章目录

  • 基本属性
  • 信号
    • 一、信号种类
    • 二、信号测试
      • 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)));//itemClickedconnect(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);//itemActivateditem_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.mzph.cn/news/47983.shtml

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

相关文章

uniapp 顶部头部样式

<u-navbartitle"商城":safeAreaInsetTop"true"><view slot"left"><image src"/static/logo.png" mode"" class"u-w-50 u-h-50"></image></view></u-navbar>

使用Pandas处理Excel文件

Excel工作表是非常本能和用户友好的&#xff0c;这使得它们非常适合操作大型数据集&#xff0c;即使是技术人员也不例外。如果您正在寻找学习使用Python在Excel文件中操作和自动化内容的地方&#xff0c;请不要再找了。你来对地方了。 在本文中&#xff0c;您将学习如何使用Pan…

怎样做好日志分析?

首先我们要知道日志分析是指检查并理解计算机生成的日志消息&#xff0c;例如日志事件或审计来跟踪记录&#xff0c;通过日志分析可以帮助您诊断和解决计算机系统中的问题&#xff0c;以及监视系统性能和安全性。 如果您想知道您的网络中发生了什么&#xff0c;以便洞察潜在的…

5.4 汇编语言:算数运算指令集

算术运算指令集是计算机中的一组基本操作&#xff0c;用于对数字执行常见的算术运算操作。这些指令都是计算机中非常基础的运算指令&#xff0c;可以用于实现所有常见的算术运算操作&#xff0c;并可以通过组合使用实现更加复杂的数学运算。在实际编程中&#xff0c;程序员可以…

面试题-React(四):React中的事件绑定如何实现?有几种方式?

一、React事件绑定机制 在React中&#xff0c;事件绑定是通过JSX语法来实现的。你可以将事件处理函数直接绑定到元素的属性上&#xff0c;比如onClick、onMouseOver等。当触发相应事件时&#xff0c;绑定的事件处理函数将被调用。 React采用了一种合成事件&#xff08;Synthe…

玄子Share - HTML Emmet 语法详细介绍

玄子Share - HTML Emmet 语法详细介绍 以下Emmet语法 基于WebStorm 2023.2演示 Emmet 语法介绍 Emmet 是一种缩写语法&#xff0c;旨在简化 HTML 和 CSS 的编写。它基于 CSS 选择器的语法结构&#xff0c;通过输入特定的缩写&#xff0c;可以快速生成 HTML 结构。 Emmet 语法…

安卓修改SwitchCompat色值

SwitchCompat控件色值跟系统设置的主题有关&#xff0c;但是主题效果不是能轻易就能改的&#xff0c;因为涉及到整个APP的样式。网上方案基本都是通过修改style文件来改变色值&#xff0c;经过多次尝试修改最终觉得单独修改控件色值比较好。 一、控件属性 //修改开关色值就是最…

面试之快速学习STL-multimap

multimap multimap 容器也用于存储 pair<const K, T> 类型的键值对&#xff08;其中 K 表示键的类型&#xff0c;T 表示值的类型&#xff09;其中各个键值对的键不能做修改&#xff1b;该容器也会自行根据键的大小对存储的所有键值对做排序操作。和 map 容器的区别在于&…

Linux相关知识点

Linux是什么&#xff1f; Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux内核 是一个Linux系统的内核&…

【JUC】线程池ThreadPoolTaskExecutor与面试题解读

1、ThreadPoolTaskExecutor 创建线程池 从它的创建和使用说起&#xff0c;创建和使用的代码如下&#xff1a; 创建&#xff1a; ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize);executor.setMaxPoolSize(maxPoolSize…

Python web实战之细说Django的集成测试

关键词&#xff1a; Python Web开发、Django、集成测试、实战、测试驱动开发、自动化测试、Selenium、测试框架、测试用例、代码覆盖率、持续集成 今天给大家分享一下Python Web开发——Django的集成测试&#xff0c;如何利用集成测试来提高代码质量、减少bug。 1. 什么是集成…

Apache Zookeeper架构和选举机制

ZooKeeper是一个开源的分布式协调服务,旨在解决分布式系统中的一致性、配置管理、领导者选举等问题。它由Apache软件基金会维护,是Hadoop生态系统的一部分,被广泛用于构建高可用、可靠和具有一致性的分布式应用程序和服务。 ZooKeeper提供了一个层次化的命名空间,类似于文…

Java之继承详解二

3.7 方法重写 3.7.1 概念 方法重写 &#xff1a;子类中出现与父类一模一样的方法时&#xff08;返回值类型&#xff0c;方法名和参数列表都相同&#xff09;&#xff0c;会出现覆盖效果&#xff0c;也称为重写或者复写。声明不变&#xff0c;重新实现。 3.7.2 使用场景与案例…

Spring复习:(55)ApplicationContext中BeanFactoryPostProcessor是怎么添加到容器的?

容器创建时会调用AbstractApplicationContext的refresh方法&#xff0c;其中会调用invokeBeanFactoryPostProcessor方法&#xff0c;如下图 invokeBeanFactoryPostProcessors代码如下&#xff1a; 其中调用的PostProcessorRegistrationDelegate的invokeBeanFactoryPostProcess…

计算机竞赛 交通目标检测-行人车辆检测流量计数 - 计算机竞赛

文章目录 0 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

vue组件注册

组件注册分为全局注册和局部注册 全局注册 在 main.js 或者入口文件中 import { createApp } from vue; import MyComponent from ./components/MyComponent.vue;const app createApp();app.component(my-component, MyComponent);app.mount(#app); 我们首先通过createApp…

转圈游戏 (Day1 T1)

全国 2013 NOIP 提高组试题 题目描述 Description n个小伙伴&#xff08;编号从0到n-1&#xff09;围坐一圈玩游戏。按照顺时针方向给n个位置编号&#xff0c;从0到n-1。最初&#xff0c;从0号小伙伴在第0号位置&#xff0c;第1号小伙伴在第1号位置&#xff0c;…&#xff0c…

【Flutter】Flutter 使用 font_awesome_flutter 展示图标

【Flutter】Flutter 使用 font_awesome_flutter 展示图标 文章目录 一、前言二、安装和基本使用1. 安装2. 基本使用示例3. 图标的命名和样式 三、自定义图标和高级功能1.动态检索图标2.排除样式和优化 四、完整示例五、总结 一、前言 在现代移动应用开发中&#xff0c;图标起着…

C语言入门 Day_8数据与运算小结

目录 前言 1.精度 2.运算 2.易错点 3.思维导图 前言 到目前为止我们一共学习了四种数据类型&#xff0c;他们分别是表示整数的整型&#xff1b;表示小数的浮点型&#xff1b;表示字符的字符型&#xff1b;和表示布尔数的布尔型。 表示整数的整型&#xff0c;它的变量类型名…

浅谈泛在电力物联网在电力设备状态在线监测中的应用

安科瑞 华楠 摘要&#xff1a;随着信息化水平的不断发展&#xff0c;泛在电力物联网的建设提上日程&#xff0c;这对提升变电站电力设备在线监测水平&#xff0c;推动智能电网发展具有重要的指导意义。对基于物联网的电力设备状态监测系统进行了研究&#xff0c;概括了泛在电力…