Как перенести функцию на 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 шт):
сигнал 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());
});
}
В заголовочный файл ничего добавлять не надо. Зачем? это же вами объявленный сигнал, который нигде не испускается.