我正在子类化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++方法完全相同。如果您在子类中重新实现它们,它们将被调用而不是父类的。
Q_DECL_OVERRIDE
的习惯是个好主意,这样(使用 C++11 编译器)如果函数签名错误,就会报错。 - Toby SpeightQPlainTextEdit
中没有undo
和redo
虚函数。使用Q_DECL_OVERRIDE
会触发编译错误。 - peppeoverride
关键字),因为在使用旧的连接语法时,插槽的虚拟性可能会起作用。但我认为,在这种情况下,信号和插槽并不是用来触发“撤消”的,而是一个“普通”的键匹配。 - peppeVoid methodCrteaesUndoandRedoActions()
{
QUndoStack unStack = new QUndoStack (this);
QAction *undoAct = undoStack->createUndoAction(this);
QAction *RedoAct = undoStack->createRedoAction(this);
}
//在你的类中实现以下函数以处理业务。
void undo()
{
}
void redo()
{
}
Ctrl+Z
--在您的keyPressEvent
中将您的QKeyEvent
与QKeySequence::Undo
进行比较:if (event->matches(QKeySequence::Undo)) { ... }
。 - peppe