Я использую Qt для реализации интерфейса, позволяющего разрабатывать для встраиваемой системы.
Я столкнулся с проблемой: для того, чтобы запустить sh программу во встроенную систему, я использую QProcess, чтобы использовать команды «make» и «make fla sh». Чтобы сделать это не проблема, и программа успешно компилируется.
Но когда я пытаюсь сделать то же самое для "make fla sh", возникает проблема, потому что консоль ожидает ввода данных пользователем, он должен нажать кнопку во встроенной системе.
Но QProcess возвращает стандартный вывод только после завершения скрипта, поэтому у меня нет сообщения «нажать кнопку».
Итак, мой вопрос: как я могу узнать, когда QProcess требуется ввод данных пользователем? Или, если это невозможно, как я могу динамически открыть консоль с помощью Qt и запустить команду?
Я попытался сказать то, что здесь сказано: https://www.qtcentre.org/threads/47538-QProcess-read-from-stdout-lively
А вот мой код:
compilator->start("make flash");
compilator->waitForFinished();
QByteArray errors = compilator->readAllStandardError();
QString stringError(errors);
QByteArray message = compilator->readAll();
QString stringMessage(message);
m_logForm->setText("Project path : "
+ pathProject + "\n"
+ "Flash finished with exit code " + QString::number(compilator->exitCode()) + "\n"
+ stringError + "\n"
+ stringMessage + "\n");
Где m_logFrom - используемый класс чтобы отобразить консольный отчет в моем интерфейсе
[EDIT] Я попробовал то, что сказал Владимир. К сожалению, у меня нет своего материала, поэтому я не могу его протестировать, но я сделал этот скрипт (test.bat), чтобы протестировать:
set /p answer=Do you want to create it now (Y/N)?
Вот мой новый код:
QProcess *compilator = new QProcess(this);
connect(compilator, &QProcess::readyReadStandardOutput, [compilator, this](){
QString output =compilator->readAll();
qDebug() << "output: "<< output;
m_logForm->setText("Flash finished with exit code " + QString::number(compilator->exitCode()) + "\n"
+ output + "\n");
});
connect(compilator, &QProcess::readyReadStandardError, [compilator, this](){
QString err = compilator->readAllStandardError();
qDebug() << "error: "<<err;
m_logForm->setText("Flash finished with exit code " + QString::number(compilator->exitCode()) + "\n"
+ err + "\n");
});
m_logForm->setText("Flashing to serial port "+m_Serial + "\n");
compilator->setWorkingDirectory(pathProject);
compilator->start("test.bat");
}
Но это ничего не делает