[Qt]使用QUndoStack运行到cmd->isObsolete()崩溃
- IT业界
- 2025-08-29 12:06:01
![[Qt]使用QUndoStack运行到cmd->isObsolete()崩溃](/0pic/pp_00.jpg)
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中因为逻辑问题,给所处的QUndoStack新push了一个QUndoCommand时,因为上面的原因,就delete掉了这个还在运行的QUndoCommand 结果push完了,继续redo的时候,cmd已经被释放了,所以崩溃了 .
解决方法处理好代码逻辑,别在QUndoCommand的redo/undo里面,出现引起push新的QUndoCommand操作。
[Qt]使用QUndoStack运行到cmd->isObsolete()崩溃由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“[Qt]使用QUndoStack运行到cmd->isObsolete()崩溃”
上一篇
元数据服务器的概述