QToolButton内存提前释放导致mouseReleaseEvent崩溃问题

news2024/11/27 8:21:58

QToolButton内存提前释放导致mouseReleaseEvent崩溃问题

1、问题现象及原因分析

1.1、问题现象
请添加图片描述

如图所示,mouseReleaseEvent接口this指针地址为空,导致了Qt内部发生了Access violation异常。

1.2、问题原因

在项目中,使用该QToolButton作为关闭按钮;对应的槽函数用来释放页面的所有资源包括该QToolButton的资源。从而导致了QToolButton的资源已经被释放,而mouseReleaseEvent还在处理鼠标释放的事件,而引发的崩溃;

2、mouseReleaseEvent事件、released信号以及clicked信号对应的槽函数执行顺序

使用demo程序发现
请添加图片描述

处理的顺序为mouseReleaseEvent -> released信号 -> clicked信号

按道理说,永远不应该出现上面描述的问题,因为mouseReleaseEvent应该在released信号槽函数执行之前就已经执行了。但是,但是,但是,谁先执行完成就不知道了,我们添加一下执行结束的日志发现
请添加图片描述
mouseReleaseEvent执行完成可能比released槽函数晚,这就有可能在槽函数中释放了QToolButton的内存但是mouseReleaseEvent还未执行完成的情况。这也是我们程序中低概率出现崩溃的原因。

3、解决方案

我们采用在connect连接函数最后添加Qt::QueuedConnection选项,使槽函数在下一个事件循环(event loop)中被调用,而不是立即调用避免先释放资源后执行mouseReleaseEvent的情况。

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

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

相关文章

一文解读!如何选择适合你的零代码、低代码开发平台

首先,我们来探讨一下什么是低/零代码。低代码和零代码的概念最早出现在2014年,由Forrester提出。它们的核心要点包括: 1. 快速交付业务应用:低代码和零代码平台能够实现业务应用的快速交付,这种速度甚至可以是颠覆性的…

JUC并发编程(JUC核心类、TimeUnit类、原子操作类、CASAQS)附带相关面试题

目录 1.JUC并发编程的核心类 2.TimeUnit(时间单元) 3.原子操作类 4.CAS 、AQS机制 1.JUC并发编程的核心类 虽然java中的多线程有效的提升了程序的效率,但是也引发了一系列可能发生的问题,比如死锁,公平性、资源管理…

局域网共享文件夹怎么加密?共享文件夹加密软件盘点

局域网共享文件夹可以提高企业的沟通效率,使数据交流更加方便,但同时也增大了数据泄露的风险。那么局域网共享文件夹怎么加密呢?下面我们就来了解一下。 局域网共享文件夹加密设置方法 普通的文件夹加密软件仅适用于电脑本地文件夹&#xff…

C++ 运算符重载为非成员函数

运算符也可与重载为非成员函数。这时运算所需要的操作数都需要通过函数的形参表来传递,在形参表中形参从左到右的顺序就是运算符操作数的顺序。如果需要访问运算符参数对象的私有成员,可以将该函数声明为友元函数。 【提示】不用机械地将重载运算符的非…

关于ANCE OS兼容性评估 Linux智能全栈调优KeenTune介绍 | 第 93-94 期

本周「龙蜥大讲堂」预告来啦!我们邀请了龙蜥 ANCE 操作系统兼容性评估工具 Maintainer、QA SIG Maintainer 谭伯龙分享《ANCE 操作系统兼容性评估》、龙蜥 KeenTune SIG Maintainer 胡玉溪做《KeenTune 智能全栈调优》主题演讲,精彩多多,快来…

wireshark入门指北

文章目录 前言安装Linux上wireshark安装 使用捕获的时候添加过滤条件抓取浏览器https内容 附录抓取非浏览器的https流量 前言 本文长期维护,记录使用wireshark的使用过程。 虽然有官方文档-Wireshark User’s Guide,但是不想去慢慢读。应用层的图形软件…

opencv基础-33 图像平滑处理-中值滤波cv2.medianBlur()

中值滤波是一种常见的图像处理滤波技术,用于去除图像中的噪声。它的原理是用一个滑动窗口(也称为卷积核)在图像上移动,对窗口中的像素值进行排序,然后用窗口中像素值的中值来替换中心像素的值。这样,中值滤…

SpringBoot源码分析(8)--内置ApplicationContextInitializer

文章目录 1、DelegatingApplicationContextInitializer2、SharedMetadataReaderFactoryContextInitializer3、ContextIdApplicationContextInitializer4、ConfigurationWarningsApplicationContextInitializer5、ServerPortInfoApplicationContextInitializer6、ConditionEvalu…

[mongo]应用场景及选型

应用场景及选型 MongoDB 数据库定位 OLTP 数据库横向扩展能力,数据量或并发量增加时候架构可以自动扩展灵活模型,适合迭代开发,数据模型多变场景JSON 数据结构,适合微服务/REST API基于功能选择 MongoDB 关系型数据库迁移 从基…

Databend 开源周报第 105 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 Databend 轻量级…

【我们一起60天准备考研算法面试(大全)-第三十八天 38/60】【双指针】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

机载激光快速建模赋能美丽乡村建设

二十大报告将“城乡人居环境明显改善,美丽中国建设成效显著”列入未来五年的主要目标任务,而乡村规划是美丽乡村建设中最为重要的一环。但是,传统测绘作业方式无法完全满足乡村规划工作中对高效率获取高现势性、多元化测绘成果的需求。 项目…

Signal Desktop for Mac(专业加密通讯软件)中文版安装教程

想让您的聊天信息更安全和隐藏吗? Mac版本的Signal Desktop是MACOS上的专业加密通信工具,非常安全。使用信号协议,该协议结合了固定前密钥,双重RATCHES算法和3-DH握手信号,该信号可以确保第三方实体将不会传达您的消息…

AI量化模型预测——baseline学习笔记

一、赛题理解 1. 赛题名称 AI量化模型预测 2. 赛题理解 本赛事是一个量化金融挑战,旨在通过大数据与机器学习的方法,使用给定的训练集和测试集数据,预测未来中间价的移动方向。参赛者需要理解市场行为的原理,创建量化策略&#…

【excel密码】excel数据加密,如何设置?

Excel数据完成制作之后,想要保护工作表数据不被修改,我们可以对excel数据设置保护,确保数据的准确性。今天分享两种方法设置数据保护。 方法一:工作表/工作簿保护 这里的限制编辑被分为了两种方式,分别是保护工作表、…

opencv基础-34 图像平滑处理-2D 卷积 cv2.filter2D()

2D卷积是一种图像处理和计算机视觉中常用的操作,用于在图像上应用滤波器或卷积核,从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中,图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动,对每个局部区…

代码随想录算法训练营day59

文章目录 Day59 下一个更大元素II题目思路代码 接雨水题目思路代码 Day59 下一个更大元素II 503. 下一个更大元素 II - 力扣(LeetCode) 题目 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每…

无涯教程-Perl - exit函数

描述 该函数判断EXPR,退出Perl解释器,并返回该值作为退出值。始终在退出之前运行脚本(和导入的程序包)中定义的所有END {}块。如果省略EXPR,则解释器以0值退出。不应用于退出子例程;否则,解释器将退出子例程。使用eval而死或使用return。 语法 以下是此函数的简单…

ffmpeg下载安装教程

ffmpeg官网下载地址https://ffmpeg.org/download.html 这里以windows为例,鼠标悬浮到windows图标上,再点击 Windows builds from gyan.dev 或者直接打开 https://www.gyan.dev/ffmpeg/builds/ 下载根据个人需要下载对应版本 解压下载的文件,并复制bin所在目录 新打开一个命令…