Как перенести функцию на readyRead QT

У меня есть код, который должен данные, выводимые bat файлом, отправлять в textLabel:

void MainWindow::on_pushButton_clicked()
{

    QString program = "PyModuleInstaller.bat";

    QProcess *Process = new QProcess(this);
    Process->start(program);
    connect(Process, &QProcess::readAllStandardOutput, [&] {
        ui->label->setText(Process->readAllStandardOutput());
    });
}

И я хочу поменять в нём readAllStandardOutput на readyReadStandardOutput(). Если просто поменять - получаю ошибку: too few arguments to function call, expected 1. Я так понял нужно добавить сигнал в файле manwindow.h

Написал что-то(наверно даже не похоже на правильно):

private: signals:
    void Read();

Но я не понял, как правильно сделать такой сигнал, и как его присоединить к textLabel чтобы данные которые даёт выполняемый bat файл отправлялись в textLabel. Помогите, пожалуйста


Ответы (1 шт):

Автор решения: Sergey Tatarincev

сигнал readyReadStandardOutput испускается асинхронно, соответственно вам надо или накапливать где-то вывод и по завершении программы использовать, либо обрабатывать вывод по мере поступления. Я заменил QLabel на QPlainTextEdit в который по мере вывода будут дописываться считываемые данные

void MainWindow::on_pushButton_clicked()
{
    QString program = "ping 127.0.0.1";
    QProcess *Process = new QProcess(this);
    Process->start(program);
    connect(Process, &QProcess::readyReadStandardOutput, [=] {
        ui->plainTextEdit->appendPlainText(Process->readAll());
    });
}

В заголовочный файл ничего добавлять не надо. Зачем? это же вами объявленный сигнал, который нигде не испускается.

→ Ссылка