Из документации Qt QTextEdit
вы можете найти действия redo
и undo
. Также вы можете проверить, доступны ли значения redo
или undo
через сигналы redoAvailable
и undoAvailable
.
Для реализации действий вы можете зарегистрироваться, используя сигнал / слот.
Например:
#include <QVBoxLayout>
#include <QPushButton>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QPushButton *poUndo = new QPushButton("Undo", this);
QPushButton *poRedo = new QPushButton("Redo", this);
QTextEdit *poTextEdit = new QTextEdit(this);
QHBoxLayout *poHlayout = new QHBoxLayout;
QLabel * poLabelRedoAvaliable = new QLabel(this);
QLabel * poLabelUndoAvaliable = new QLabel(this);
// add undo/redo buttons
poHlayout->addWidget(poRedo);
poHlayout->addWidget(poUndo);
QVBoxLayout *poVLayout = new QVBoxLayout;
poVLayout->addWidget(poTextEdit); // add text edit
poVLayout->addLayout(poHlayout);
// redo/undo avaliable status
poVLayout->addWidget(poLabelRedoAvaliable);
poVLayout->addWidget(poLabelUndoAvaliable);
// main central widget
QWidget *poCentral = new QWidget(this);
poCentral->setLayout(poVLayout);
this->setCentralWidget(poCentral);
// register the undo/redo actions actions
connect(poUndo, &QPushButton::clicked, poTextEdit, &QTextEdit::undo);
connect(poRedo, &QPushButton::clicked, poTextEdit, &QTextEdit::redo);
connect(poTextEdit, &QTextEdit::redoAvailable,
[poLabelRedoAvaliable](bool bAvailable)
{
if (bAvailable)
{
poLabelRedoAvaliable->setText("redo available");
}
else {
poLabelRedoAvaliable->setText("redo not available");
}
});
connect(poTextEdit, &QTextEdit::undoAvailable,
[poLabelUndoAvaliable](bool bAvailable)
{
if (bAvailable)
{
poLabelUndoAvaliable->setText("undo available");
}
else {
poLabelUndoAvaliable->setText("undo not available");
}
});
}