довольно новый для 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"
но это не похоже на работу.
Сценарий ресурса работает отлично, но вывод консоли исчезает.
По этой причине есть нечто, называемоеQTemporaryFile» учебный класс.
Потому что вам нужно вызвать файл, который уже существует в вашей системе — хорошо!
давайте возьмем этот пример:
с помощью 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
чтобы получить уникальное временное имя файла.