首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在运行资源文件时重定向QProcess的输出

在运行资源文件时重定向QProcess的输出
EN

Stack Overflow用户
提问于 2016-12-21 10:12:15
回答 2查看 972关注 0票数 2

对Qt来说还挺新鲜的。

我使用QProcess运行外部shell脚本,并将输出重定向到GUI上的textBrowser。代码:

在主窗口h:

代码语言:javascript
运行
复制
private:
   QProcess *myProcess;

和mainwindow.cpp:

代码语言:javascript
运行
复制
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",但它似乎不起作用。资源脚本运行良好,但控制台输出消失。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-01 02:33:53

因此,有一种叫做"QTemporaryFile“类的东西。

因为您需要调用一个已经在您的系统中存在的文件-好的!

让我们以这个例子为例:

使用QProcess,我们需要从资源运行python文件。

代码语言:javascript
运行
复制
//[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文档- QTemporaryFile类

好运♥

票数 6
EN

Stack Overflow用户

发布于 2016-12-21 10:24:24

我没有工作,因为当您运行myProcess->start(":/someScript.sh", arguments);时,您要求您的系统运行不存在于您的系统的:/someScript.sh

一个快速的解决方案是将脚本复制到一个临时文件夹并从那里运行它。

代码语言:javascript
运行
复制
QFile::copy(":/someScript.sh", pathToTmpFile);
myProcess->start(pathToTmpFile, arguments);

我还建议您使用QTemporaryFile获得一个唯一的临时文件名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41260236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档