【发布时间】:2014-02-13 10:43:15
【问题描述】:
我从我正在创建的 Qt 应用程序中编译了一个 c++ 源文件。现在我想运行生成的 exe 文件,并将其输入和输出重定向到 txt 文件。但是当我尝试从 QProcess 运行它时,它无法执行,退出代码为 -2。
这就是我使用 QProcess 编译文件的方式 -
arguments << fileName << "-o" << exeFileName << "-static";
connect(compileProcess, SIGNAL(finished(int)), this, SLOT(compiled()));
compileProcess->start(QString("g++"), arguments);
这就是我从 QProcess 在插槽中运行 exe 的方式compiled() -
runProcess->setStandardInputFile(inputFilename);
runProcess->setStandardOutputFile(QFileInfo(exeFileName).path() + "/output.txt");
int code = runProcess->execute(exeFileName); //code = -2
当我手动启动程序时,它运行良好。那么,为什么不能从 QProcess 启动呢? 我在 Windows 7 上使用 Qt 5.0.2
这是我正在编译的源文件-
#include <iostream>
int main() {
std::string s;s
std::cin >> s;
std::cout << s;
return 0;
}
【问题讨论】:
-
如果添加
readAllStandardError并打印内容,是否有任何信息?-2通常是它无法以正确的权限打开可执行文件,或者找不到可执行文件,因此还要仔细检查exeFileName是否指向正确的位置。 -
readAllStandardError不返回任何信息。我验证了exeFileName指向正确的文件。 -
我能想到的唯一另一件事是 QProcess 设置为应用程序工作目录,而不是查看
exeFileName路径。 -
有一个工作目录方法:qt-project.org/doc/qt-5.0/qtcore/… 基本上 QProcess 将其设置为您的应用程序正在运行的目录,但偶尔会导致问题。
-
好的,但是
exeFileName有文件的绝对路径,即使这样QProcess也找不到文件?