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);}}}```
相关文章:

QTreeWidget——信号处理
文章目录 基本属性信号一、信号种类二、信号测试1、currentItemChanged、itemCollapsed、itemExpanded三个信号的测试2、itemActivated信号3、 itemChanged信号4、其余信号的测试代码(包含以上代码) 基本属性 信号 一、信号种类 //当前项发生变化时触…...

【Java从入门到精通|1】从特点到第一个Hello World程序
写在前面 在计算机编程领域,Java是一门广泛应用的高级编程语言。它以其强大的跨平台性能、丰富的库和生态系统以及易于学习的语法而备受开发者欢迎。本文将引导您逐步了解Java的特点、如何安装和配置开发环境,以及如何编写您的第一个Java程序。 一、Java…...

JAVA 读取jar包中excel模板
1、在resources路径下,新建report文件夹,放入excel模板 2、配置文件中的目录,分隔符使用 / template: /report/报告模板V1.0.xlsx3、使用getResourceAsStream()读取 XSSFWorkbook wb;try {//需要以/开始InputStream resourceAsStream this.g…...

解决方案:fatal error: openssl/bio.h: 没有那个文件或目录
出现报错如下: 出现该错误的原因有两个: 没有安装openssl或者libssl-dev库Libssl-dev版本过高,需要降级 一. 没有安装openssl或者libssl-dev库 使用指令安装openssl: 我的是已经安装完成了,所以再把libssl-dev的库也…...

【MySQL系列】ALTER语句详解,以及UPDATE,DELECT,TRUNCATE语句的使用+区别
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
c++关键字 =delete和=default
在C的类中,有四类特殊的成员函数:① 默认构造函数;② 拷贝构造函数;③ 拷贝赋值函数(operator);④ 析构函数;它们控制着类的实例的创建、初始化、拷贝以及销毁。 (1&…...

idea 左下角的Git(Version Control)中显示Local Changes窗口
打开Local Changes窗口来查看当前Git仓库的本地变更。 使用快捷键: - Windows: Alt9 - Mac: Cmd9 解决: (1)idea打开settings (2)点击Version Control窗口选项卡,选择Commit选项,对 Use.... in…...
.net老项目中Jquery访问webservice
.net老项目中Jquery访问webservice 1. xml类型返回 jQuery.ajax({type: "POST",async: false,url: "WebService/Evection.asmx/GetCheckUpApplyEForm",contentType: "application/json",data: "{lngEvectionID:" eformSNOriginal &…...

SpringBoot项目集成ElasticSearch服务
本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍优势说明集成过程1.引入依赖2.添加配置文件3.初始化 示例说明代码结果 总结提升 版本介绍 Spring boot的版本是: 2.3.12 ElasticSearch的版本是:7.6.2 背景介绍 在我们的项目中经常会遇到对于…...

2023年网络安全比赛--综合渗透测试(超详细)
一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.扫描目标靶机将靶机开放的所有端口,当作flag提交(例:21,22,23); 2.扫描目标靶机将靶机的http服务版本信息当作flag提交(例:apache 2.3.4); 3.靶机网站存在目录遍历漏洞,请将…...

一次网络不通“争吵“引发的思考
作者: 郑明泉、余凯 为啥争吵,吵什么? “你到底在说什么啊,我K8s的ecs节点要访问clb的地址不通和本地网卡有什么关系…” 气愤语气都从电话那头传了过来,这时电话两端都沉默了。过了好一会传来地铁小姐姐甜美的播报声…...

【使用Node.js搭建自己的HTTP服务器】
文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation࿰…...

回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)效果…...
● 392.判断子序列 ● 115.不同的子序列
● 392.判断子序列 class Solution { public:bool isSubsequence(string s, string t) {int len1s.size(),len2t.size();int res0;vector<vector<int>>dp(s.size()1,vector<int>(t.size()1,false));for(int i1;i<s.size();i){for(int j1;j<len2;j){if(…...

4.SpringCloud 基本架构
1.SpringCloud概述 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,…...
springboot后端返回图片,vue前端接收并显示的解决方案
后端图片数据返回 后端通过二进制流的形式,写入response中 controller层 /*** 获取签到二维码*/GetMapping("/sign-up-pict")public void signUpPict(Long id, Long semId, HttpServletResponse response) throws NoSuchAlgorithmException {signUpServ…...
算法|Day46 动态规划14
LeetCode 1143- 最长公共子序列 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ÿ…...

宠物小程序开发攻略:五分钟教你打造宠物店小程序
随着互联网技术的发展和智能手机的普及,小程序成为了各行各业的新宠。宠物服务行业也不例外,宠物店通过搭建小程序,可以实现线上线下的结合,提供更便捷的服务和更优质的用户体验。那么,宠物服务小程序的制作流程是怎样…...

open suse 15.5(任意版本) 使用阿里云的repo
一、shell suse 的包管理工具叫 zypper. zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/15.5/repo/oss/ openSUSE-15.5-Oss zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/15.5/repo/non-oss/ openSUSE-15.5-Non-Oss …...

第一篇:编写 Hello World 程序
编写 Hello World 程序 Hello World 程序就是让应用程序显示 Hello World 字符串。这是最简单的应用,但却包含了一个应用程序的基本要素,所以一般使用它来演示程序的创建过程。本章要讲的就是在Qt Creator 中创建一个图形用户界面的项目,从而…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...