Как переопределить отмену / повтор в QPlainTextEdit

Я подклассифицирую редактирование QPlainText, и я хотел бы иметь возможность перехватывать команды отмены / повтора, чтобы я мог реализовать пользовательские функции.

Я понимаю, что могу отключить возможность отмены / возврата с помощью setUndoRedoEnabled и могу обнаружить нажатия клавиш Ctrl + Z и Ctrl + Y. Тем не менее, это не лучший кроссплатформенный способ сделать это.

Любой совет?

2

Решение

Вам просто нужно переопределить слоты:

class MyTestEdit : public QPlainTextEdit {
Q_OBJECT

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

};

Сигнал и слоты точно такие же, как и другие методы С ++. Если вы переопределите их в подклассе, они будут вызваны вместо родительского.

1

Другие решения

Я думаю, что вы можете использовать «QUndoStack» для этого.

В конструкторе вашего подкласса (лучше конструктор), вызовите метод, который создает действия Undo и Redo для обработки вашего класса.

Прототип:

// Вызов этой функции для регистрации действий отмены и повтора.

Void methodCrteaesUndoandRedoActions()
{

QUndoStack unStack = new QUndoStack (this);

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

}

// Реализуем функции ниже в вашем классе для управления бизнесом.

void undo()
{}

void redo()
{}
0

По вопросам рекламы [email protected]