Перенаправление вывода QProcess при запуске файла ресурса

Довольно новый для Qt.

Я использую QProcess для запуска сценария внешней оболочки и перенаправления вывода в textBrowser на моем графическом интерфейсе. Код:

В mainwindow.h:

private:
   QProcess *myProcess;

и mainwindow.cpp:

void MainWindow::onButtonPressed(){
   myProcess = new QProcess(this);
   myProcess->connect(myProcess, SIGNAL(readyRead()), this, SLOT(textAppend()));
   myProcess->start("./someScript.sh", arguments);
}

void MainWindow::textAppend(){
   ui->textBrowser->append(myProcess->readAll());
}

Это прекрасно работает для запуска внешнего скрипта. У меня вопрос, как применить тот же процесс со сценарием, включенным в файл ресурсов. Я пытался просто заменить "./someScript.sh" с версией ресурса ":/someScript.sh" но это не похоже на работу. Сценарий ресурса работает отлично, но вывод консоли исчезает.

2 ответа

Решение

По этой причине существует класс, называемыйклассом QTeoraryFile.

Потому что вам нужно вызвать файл, который уже существует в вашей системе - хорошо!

давайте возьмем этот пример:

используя QProcess нам нужно запустить файл python из ресурса

//[1] Get Python File From Resource
QFile RsFile(":/send.py");
//[2] Create a Temporary File
QTemporaryFile *NewTempFile = QTemporaryFile::createNativeFile(RsFile);
//[3] Get The Path of Temporary File
QStringList arg;
arg << NewTempFile->fileName();
//[4] Call Process
QProcess *myProcess = new QProcess(this);
myProcess->start("python", arg);
//[5] When You Finish, remove the temporary file
NewTempFile->remove();

Примечание. В Windows временный файл хранится в каталоге %TEMP%.

и для получения дополнительной информации вы можете посетить документацию Qt - класс QTevenFile

Удачи ♥

У меня не работает потому что когда запускаешь myProcess->start(":/someScript.sh", arguments); ты просишь свою систему запустить :/someScript.sh который не существует для вашей системы.

Быстрое решение - скопировать скрипт во временную папку и запустить его оттуда.

QFile::copy(":/someScript.sh", pathToTmpFile);
myProcess->start(pathToTmpFile, arguments);

Я бы также предложил вам использовать QTemporaryFile чтобы получить уникальное временное имя файла.

Другие вопросы по тегам