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

[Qt] 使用QUndoStack运行到cmd->isObsolete()崩溃

redo/undo中又push了

  • 崩溃情况
  • 崩溃原因
  • 解决方法

崩溃情况

在正常调用QUndoStack的redo/undo时,崩溃在了这里
在这里插入图片描述

unknown:0 QWidget: Cannot create a QWidget without QApplication

.

崩溃原因

在正常调用QUndoStack的redo/undo时,因为自身的逻辑处理,改变了某些值,其值的信号引起新建了QUndoCommand,并调用QUndoStack的push函数。

redo为例子,从源码上看的话,就是这个还在859行的cmd->redo运行时,此时的d->index还没有+1,还是先前的下标,所以现在的d->index值还是d->command_list.size() - 1
在这里插入图片描述
而当redo中因为逻辑问题,给所处的QUndoStackpush了一个QUndoCommand时,因为上面的原因,就delete掉了这个还在运行的QUndoCommand
在这里插入图片描述
结果push完了,继续redo的时候,cmd已经被释放了,所以崩溃了
在这里插入图片描述
.

解决方法

处理好代码逻辑,别在QUndoCommand的redo/undo里面,出现引起push新的QUndoCommand操作。

相关文章:

  • 【Axure 模版素材】数据可视化驾驶舱+图表素材 - AxureMost
  • numpy(02 数据类型和数据类型转换)
  • “深入浅出”系列之C++:(22)asio库
  • 服务器部署基于Deepseek的检索增强知识库
  • 嵌入式硬件篇---常用的汇编语言指令
  • Mini-Omni2
  • java防抖,防止表单重复提交,aop注解形式
  • deepseek帮我设计物理量采集单片机口保护电路方案
  • 什么是Baklib云内容中台?
  • chrome V3插件开发,调用 chrome.action.setIcon,提示路径找不到
  • 操作系统2.4
  • 虚拟环境下Python调用C++开发的dll如何联调?一文解答!(Python开发环境PyCharm,C++开发环境Visual Studio)
  • Python JSON的深度解析:从基础到应用
  • 【用deepseek实现快递查询】快递物流查询-快递查询-快递查询-快递物流查询-快递物流轨迹查询-快递物流查询接口-快递查询-快递物流查询
  • Flask实现高效日志记录模块
  • DeepSeek与ChatGPT:AI语言模型的全面技术解析与对比
  • linux进程间通信的posix消息队列应用记录
  • Go日期时间处理工具Carbon
  • python 如何获取文件的keys
  • 【C语言】C语言 哈夫曼编码传输(源码+数据文件)【独一无二】
  • 落实中美经贸高层会谈重要共识,中方调整对美加征关税措施
  • 北京今日白天超30℃晚间下冰雹,市民称“没见过这么大颗的”
  • 专访|茸主:杀回UFC,只为给自己一个交代
  • 广州地铁十一号线赤沙车辆段工程高坠事故调查报告公布:1人重伤且漏报
  • 广州一饮品店取名“警茶”?市监局:取名没问题,但图像会产生误解
  • 北洋“修约外交”的台前幕后——民国条约研究会档案探研