当前位置: 首页 > news >正文

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、其余信号的测试代码&#xff08;包含以上代码&#xff09; 基本属性 信号 一、信号种类 //当前项发生变化时触…...

【Java从入门到精通|1】从特点到第一个Hello World程序

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

JAVA 读取jar包中excel模板

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

解决方案:fatal error: openssl/bio.h: 没有那个文件或目录

出现报错如下&#xff1a; 出现该错误的原因有两个&#xff1a; 没有安装openssl或者libssl-dev库Libssl-dev版本过高&#xff0c;需要降级 一. 没有安装openssl或者libssl-dev库 使用指令安装openssl&#xff1a; 我的是已经安装完成了&#xff0c;所以再把libssl-dev的库也…...

【MySQL系列】ALTER语句详解,以及UPDATE,DELECT,TRUNCATE语句的使用+区别

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

c++关键字 =delete和=default

在C的类中&#xff0c;有四类特殊的成员函数&#xff1a;① 默认构造函数&#xff1b;② 拷贝构造函数&#xff1b;③ 拷贝赋值函数&#xff08;operator&#xff09;&#xff1b;④ 析构函数&#xff1b;它们控制着类的实例的创建、初始化、拷贝以及销毁。 &#xff08;1&…...

idea 左下角的Git(Version Control)中显示Local Changes窗口

打开Local Changes窗口来查看当前Git仓库的本地变更。 使用快捷键: - Windows: Alt9 - Mac: Cmd9 解决&#xff1a; &#xff08;1&#xff09;idea打开settings &#xff08;2&#xff09;点击Version Control窗口选项卡&#xff0c;选择Commit选项&#xff0c;对 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的版本是&#xff1a; 2.3.12   ElasticSearch的版本是&#xff1a;7.6.2 背景介绍 在我们的项目中经常会遇到对于…...

2023年网络安全比赛--综合渗透测试(超详细)

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

一次网络不通“争吵“引发的思考

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

【使用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&#xff0…...

回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果…...

● 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为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff0c;一次性令牌&#xff0c;全局锁&#xff0c;…...

springboot后端返回图片,vue前端接收并显示的解决方案

后端图片数据返回 后端通过二进制流的形式&#xff0c;写入response中 controller层 /*** 获取签到二维码*/GetMapping("/sign-up-pict")public void signUpPict(Long id, Long semId, HttpServletResponse response) throws NoSuchAlgorithmException {signUpServ…...

算法|Day46 动态规划14

LeetCode 1143- 最长公共子序列 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述&#xff1a;给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff…...

宠物小程序开发攻略:五分钟教你打造宠物店小程序

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

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 字符串。这是最简单的应用&#xff0c;但却包含了一个应用程序的基本要素&#xff0c;所以一般使用它来演示程序的创建过程。本章要讲的就是在Qt Creator 中创建一个图形用户界面的项目&#xff0c;从而…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...