Я подклассифицирую редактирование QPlainText, и я хотел бы иметь возможность перехватывать команды отмены / повтора, чтобы я мог реализовать пользовательские функции.
Я понимаю, что могу отключить возможность отмены / возврата с помощью setUndoRedoEnabled и могу обнаружить нажатия клавиш Ctrl + Z и Ctrl + Y. Тем не менее, это не лучший кроссплатформенный способ сделать это.
Любой совет?
Вам просто нужно переопределить слоты:
class MyTestEdit : public QPlainTextEdit {
Q_OBJECT
public slots:
void redo() { ... }
void undo() { ... }
};
Сигнал и слоты точно такие же, как и другие методы С ++. Если вы переопределите их в подклассе, они будут вызваны вместо родительского.
Я думаю, что вы можете использовать «QUndoStack» для этого.
В конструкторе вашего подкласса (лучше конструктор), вызовите метод, который создает действия Undo и Redo для обработки вашего класса.
Прототип:
// Вызов этой функции для регистрации действий отмены и повтора.
Void methodCrteaesUndoandRedoActions()
{
QUndoStack unStack = new QUndoStack (this);
QAction *undoAct = undoStack->createUndoAction(this);
QAction *RedoAct = undoStack->createRedoAction(this);
}
// Реализуем функции ниже в вашем классе для управления бизнесом.
void undo()
{}
void redo()
{}