[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操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溪渣渣_梁世华

打赏?我甚至没有任何收费的章节

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值