4

我是 QPlainText 编辑的子类,我希望能够拦截撤消/重做命令,以便我可以实现自定义功能。

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

有什么建议吗?

4

2 回答 2

1

您只需要重新实现插槽:

class MyTestEdit : public QPlainTextEdit {
    Q_OBJECT

public slots:
    void redo() { ... }
    void undo() { ... }

};

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

于 2016-10-31T16:53:53.227 回答
0

我认为您可以为此使用“QUndoStack”。

在您的子类的构造函数(构造函数更好)中,调用一个创建撤消和重做动作的方法来处理您的类。

原型:

//调用这个函数来注册撤销和重做动作。

Void methodCrteaesUndoandRedoActions()
{

QUndoStack unStack = new QUndoStack (this);

QAction *undoAct = undoStack->createUndoAction(this);
QAction *RedoAct = undoStack->createRedoAction(this);

}

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

void undo()
{



}

void redo()
{



}
于 2016-10-31T17:02:44.677 回答