QT- Сигнал и слот setEnabled (bool) не работают - PullRequest
0 голосов
/ 05 мая 2018

Я работал над простым приложением для блокнота, используя QT, и в настоящее время застрял в месте, где я должен отключить actionUndo и actionRedo, когда отмены или повторы не применимы соответственно. Я использовал метод подключения QT, и в настоящее время мой constructor function (вместе с includes) выглядит следующим образом:

#include "notepad.h"
#include "ui_notepad.h"
#include "about.h"
#include <QFile>
#include <QTextStream>
#include <QFileDialog>
#include <QIcon>
#include <QFont>
#include <QFontDialog>
#include <QTextCursor>

Notepad::Notepad(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Notepad)
{
    ui->setupUi(this);
    setWindowTitle("QNotepad");
    setWindowIcon(QIcon(":/icons/icons/qnotepad.png"));
    setCentralWidget(ui->textBody);

    //Enabling the options, only when applicable
    connect(ui->textBody, SIGNAL(undoAvailable(bool)), ui->actionUndo, SLOT(setEnabled(bool)));
    connect(ui->textBody, SIGNAL(redoAvailable(bool)), ui->actionRedo, SLOT(setEnabled(bool)));

}

Полные источники здесь

Но, похоже, он не работает, так как при запуске программы actionUndo и actionRedo остаются включенными, даже когда нет доступных операций отмены и возврата.

A screenshot of the problem

Я использую Arch Linux в качестве основной среды разработки

1 Ответ

0 голосов
/ 05 мая 2018

Элементы Qt Ui (виджеты, действия и т. Д.) Включены по умолчанию, поэтому вам необходимо снять флажок «Включить» для действия «Отменить» и «Повторить» в окне свойств дизайнера Qt для вашего файла notepad.ui. В качестве альтернативы вы можете сделать это в конструкторе вашего окна следующим образом:

ui->actionUndo->setEnabled(false);
ui->actionRedo->setEnabled(false);

//Enabling the options, only when applicable
connect(ui->textBody, &QTextEdit::undoAvailable, ui->actionUndo, &QAction::setEnabled);
connect(ui->textBody, &QTextEdit::undoAvailable, ui->actionRedo, &QAction::setEnabled);

Таким образом, они будут включены / выключены только тогда, когда QTextEdit испустит сигнал.

Также рассмотрите возможность использования синтаксиса функтора для вашего соединения сигнал / слот, как показано в моем фрагменте кода, потому что у него есть несколько преимуществ. См. здесь , чтобы узнать больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...