我是 QPlainText 编辑的子类,我希望能够拦截撤消/重做命令,以便我可以实现自定义功能。
我意识到我可以使用 setUndoRedoEnabled 禁用撤消/重做功能,并且可以检测到 Ctrl+Z 和 Ctrl+Y 按键。但是,这似乎不是最好的跨平台方式。
有什么建议吗?
我是 QPlainText 编辑的子类,我希望能够拦截撤消/重做命令,以便我可以实现自定义功能。
我意识到我可以使用 setUndoRedoEnabled 禁用撤消/重做功能,并且可以检测到 Ctrl+Z 和 Ctrl+Y 按键。但是,这似乎不是最好的跨平台方式。
有什么建议吗?
您只需要重新实现插槽:
class MyTestEdit : public QPlainTextEdit {
Q_OBJECT
public slots:
void redo() { ... }
void undo() { ... }
};
信号和插槽与其他 c++ 方法完全相同。如果您在子类中重新实现它们,它们将被调用而不是父类。
我认为您可以为此使用“QUndoStack”。
在您的子类的构造函数(构造函数更好)中,调用一个创建撤消和重做动作的方法来处理您的类。
原型:
//调用这个函数来注册撤销和重做动作。
Void methodCrteaesUndoandRedoActions()
{
QUndoStack unStack = new QUndoStack (this);
QAction *undoAct = undoStack->createUndoAction(this);
QAction *RedoAct = undoStack->createRedoAction(this);
}
//在你的类中实现以下函数来处理业务。
void undo()
{
}
void redo()
{
}