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

QNetworkAccessManager异步请求有时候操作UI控件崩溃问题

出现场景:

在主界面打开一个子窗口

子窗口中使用QNetworkAccessManager发送异步请求后,得到一个QNetworkReply的对象reply,

此时我们绑定reply对象的finished信号,然后在对应的槽函数中解析得到的数据后去更新界面的控件

但是当请求的返回有延迟时,我们关闭这个子窗口后,响应才返回,槽函数才调用,此时去更新控件,控件已经被析构了,就会抛访问冲突的异常,程序崩溃

如何解决:

使用QPointer类,这是个模板类,可以获取所有QObject及其子类对象的地址,持有一个弱引用,

当持有的对象析构时, QPointer类的对象会变为空

模板参数必须是QObject或者其子类

用法如下:

QNetworkAccessManager * mgr = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setUrl(QUrl("www.baidu.com"));//发送异步请求,得到QNetworkReply的对象
QNetworkReply * reply = mgr -> get(request);//使用QPointer<Widget>保存当前窗口的地址
QPointer < Widget > weakPtr(this);
connet(reply, & QNetworkReply::finished, this, [ = ]() {//槽函数中捕获这个弱引用指针,用=捕获副本//当这个窗口销毁时,这个ptr就会变为空,此时直接return掉,并删除掉replyif (weakPtr.isNull()) {reply -> deleteLater();return;}//这里导致崩溃的语句也就不会执行了this -> label -> setText("aaa");
});

http://www.dtcms.com/a/266949.html

相关文章:

  • ASP.NET MVC架构 路由提取
  • 第2期汽车模型数字工程沙龙,世冠科技分享汽车控制系统开发国产应用
  • 飞凌OK3568核心板与FPGA之间PCIe通信测试操作手册
  • FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持
  • Day05: Python 中的并发和并行(1)
  • 堆的应用(建堆、堆排序、TOP-K问题)
  • 网安系列【3】之深入理解内容安全策略(CSP)
  • 迁移Ubuntu启动文件到另一块硬盘
  • ubuntu 18.04配置镜像源
  • 操作Choose Boot Java Run time for the IDE 导致AS重新安装后依然无法启动(已解决)
  • 考研408《计算机组成原理》复习笔记,第三章(3)——多模块存储器
  • Web前端:全选框的使用
  • Abase和ByteKV存储方案对比
  • 【C#】入门
  • tmux 左下角会话名显示不全的解决方法
  • SpringBoot-规划多模块目录结构
  • 项目介绍:Awesome System Prompts
  • 免费PDF处理软件,支持多种操作
  • 开源项目XYZ.ESB:数据库到数据库(DB->DB)集成
  • 系统架构师
  • Class5多层感知机的从零开始实现
  • Linux awk 命令
  • 浅谈 webshell 构造之如何获取恶意函数
  • chrome插件合集
  • 4 位量化 + FP8 混合精度:ERNIE-4.5-0.3B-Paddle本地部署,重新定义端侧推理效率
  • 【LUT技术专题】CLUT代码讲解
  • 写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
  • MSPM0G3507学习笔记(一) 重置版:适配逐飞库的ti板环境配置
  • 服装零售企业跨区域运营难题破解方案
  • 深度学习笔记29-RNN实现阿尔茨海默病诊断(Pytorch)