Отмена / повтор в QTextEdit

#c #qt

#c #qt

Вопрос:

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

  1. Когда я пытаюсь нажать на QAction элемент, играющий роль отмены, тогда, когда будет достигнут конец истории отслеживания отмены, должно быть возвращено конкретное значение (или bool или int ). После успешного выполнения этого (приведенной выше команды), как я предполагаю, будут реализованы другие команды.
  2. То же самое должно быть выполнено для повтора.

Спасибо.

Комментарии:

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 предоставляет доступ к буферу отмены / повтора. в любом случае, пожалуйста, примите мой ответ, если он работает для вас. Спасибо.