如何覆盖撤销/重做在QPlainTextEdit

How to override undo / redo in QPlainTextEdit

本文关键字:重做 QPlainTextEdit 何覆盖 覆盖      更新时间:2023-10-16

我正在子类化q明文编辑,我希望能够拦截撤消/重做命令,以便我可以实现自定义功能。

我意识到我可以用setUndoRedoEnabled禁用撤消/重做功能,我可以检测Ctrl+Z和Ctrl+Y按键。然而,这似乎不是最好的跨平台方式。

任何建议吗?

您只需要重新实现插槽:

class MyTestEdit : public QPlainTextEdit {
    Q_OBJECT
public slots:
    void redo() { ... }
    void undo() { ... }
};

Signal和slots与其他c++方法完全相同。如果你在子类中重新实现它们,它们将被调用,而不是父类。

我认为你可以使用"QUndoStack"。

在子类的构造函数中(最好是构造函数),调用一个方法来创建撤销和重做操作来处理你的类。

原型:

//调用这个函数注册撤销和重做操作

Void methodCrteaesUndoandRedoActions()
{
QUndoStack unStack = new QUndoStack (this);
QAction *undoAct = undoStack->createUndoAction(this);
QAction *RedoAct = undoStack->createRedoAction(this);
}

//在你的类中实现下面的函数来处理业务

void undo()
{

}
void redo()
{

}