#c #qt
#c #qt
Вопрос:
Программа, которую я создаю, включает в себя QTextEdit
часть. Я хочу выполнить следующую функцию:
- Когда я пытаюсь нажать на
QAction
элемент, играющий роль отмены, тогда, когда будет достигнут конец истории отслеживания отмены, должно быть возвращено конкретное значение (илиbool
илиint
). После успешного выполнения этого (приведенной выше команды), как я предполагаю, будут реализованы другие команды. - То же самое должно быть выполнено для повтора.
Спасибо.
Комментарии:
1.Я предлагаю вам прочитать
QTextEdit
документ, в котором вы найдете все необходимые действия.
Ответ №1:
В QTextEdit
документации Qt вы можете найти действия redo
и undo
. также вы можете проверить redo
, доступны ли или undo
с помощью сигналов redoAvailable
and 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, amp;QPushButton::clicked, poTextEdit, amp;QTextEdit::undo);
connect(poRedo, amp;QPushButton::clicked, poTextEdit, amp;QTextEdit::redo);
connect(poTextEdit, amp;QTextEdit::redoAvailable,
[poLabelRedoAvaliable](bool bAvailable)
{
if (bAvailable)
{
poLabelRedoAvaliable->setText("redo available");
}
else {
poLabelRedoAvaliable->setText("redo not available");
}
});
connect(poTextEdit, amp;QTextEdit::undoAvailable,
[poLabelUndoAvaliable](bool bAvailable)
{
if (bAvailable)
{
poLabelUndoAvaliable->setText("undo available");
}
else {
poLabelUndoAvaliable->setText("undo not available");
}
});
}
Комментарии:
1. @Вадим Чернецов, вам нужна дополнительная помощь с этим вопросом?
2. Да, мне нужно. Есть ли возможность получить доступ к истории отмены / повтора в
QTextEdit
?3. @VadimChernetsov, я не думаю, что Qt предоставляет доступ к буферу отмены / повтора. в любом случае, пожалуйста, примите мой ответ, если он работает для вас. Спасибо.