对Qt来说还挺新鲜的。
我使用QProcess运行外部shell脚本,并将输出重定向到GUI上的textBrowser。代码:
在主窗口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",但它似乎不起作用。资源脚本运行良好,但控制台输出消失。
发布于 2017-10-01 02:33:53
因此,有一种叫做"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文档- QTemporaryFile类
好运♥
发布于 2016-12-21 10:24:24
我没有工作,因为当您运行myProcess->start(":/someScript.sh", arguments);时,您要求您的系统运行不存在于您的系统的:/someScript.sh。
一个快速的解决方案是将脚本复制到一个临时文件夹并从那里运行它。
QFile::copy(":/someScript.sh", pathToTmpFile);
myProcess->start(pathToTmpFile, arguments);我还建议您使用QTemporaryFile获得一个唯一的临时文件名。
https://stackoverflow.com/questions/41260236
复制相似问题