PS多次连续撤销

只能撤销一次,要按Ctrl+Shfi+Z才能继续撤销操作


是的,Qt的QTreeWidget支持多次撤销与恢复操作。可以使用QUndoStack和QUndoCommand来实现这个功能。 首先,你需要创建一个QUndoStack对象来管理撤销与恢复操作。然后,你需要实现一个继承自QUndoCommand的自定义命令类,用于保存每次操作的状态。在每次操作时,你需要创建一个新的自定义命令对象,并将其推入QUndoStack中。当需要撤销操作时,可以调用QUndoStack的undo()方法,当需要恢复操作时,可以调用redo()方法。 下面是一个简单的示例代码: ```cpp // 创建一个QUndoStack对象 QUndoStack *undoStack = new QUndoStack(this); // 自定义命令类 class TreeWidgetItemCommand : public QUndoCommand { public: TreeWidgetItemCommand(QTreeWidgetItem *item, const QString &text, QUndoCommand *parent = nullptr) : QUndoCommand(parent), m_item(item), m_text(text) { // 保存操作前的状态 m_oldText = m_item->text(0); } void undo() override { // 恢复操作前的状态 m_item->setText(0, m_oldText); } void redo() override { // 执行操作后的状态 m_item->setText(0, m_text); } private: QTreeWidgetItem *m_item; QString m_text; QString m_oldText; }; // 在添加或修改项时,创建一个新的自定义命令对象,并将其推入QUndoStack中 void MainWindow::on_treeWidget_itemChanged(QTreeWidgetItem *item, int column) { QString text = item->text(column); undoStack->push(new TreeWidgetItemCommand(item, text)); } // 撤销操作 void MainWindow::on_actionUndo_triggered() { undoStack->undo(); } // 恢复操作 void MainWindow::on_actionRedo_triggered() { undoStack->redo(); } ``` 在这个示例代码中,我们创建了一个QUndoStack对象,并实现了一个自定义命令类TreeWidgetItemCommand,用于保存每次操作的状态。在添加或修改项时,我们创建一个新的自定义命令对象,并将其推入QUndoStack中。当需要撤销或恢复操作时,我们调用QUndoStack的undo()和redo()方法来执行相应的操作。 需要注意的是,这个示例只实现了对项文本的撤销与恢复操作,如果你需要支持更多的操作,比如添加、删除项等,你需要在自定义命令类中保存更多的状态,并在undo()和redo()方法中执行相应的操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值