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