C++ 使用QProcess在Qt中运行外部可执行文件

C++ 使用QProcess在Qt中运行外部可执行文件,c++,qt,qprocess,C++,Qt,Qprocess,我试图在Qt中作为一个单独的进程运行一个外部可执行文件(下面的代码) 测试c: #include <stdio.h> int main () { FILE *f; f = fopen("a.txt", "w"); fprintf(f, "1\n"); fclose(f); return 1; } 我已经阅读了execute()、start()和startDetached()之间的区别,据我所知,我想使用execute(),因为我希望运行外部可

我试图在Qt中作为一个单独的进程运行一个外部可执行文件(下面的代码)

测试c:

#include <stdio.h>
int main () {
    FILE *f;
    f = fopen("a.txt", "w");
    fprintf(f, "1\n");
    fclose(f);
    return 1;
}
我已经阅读了execute()、start()和startDetached()之间的区别,据我所知,我想使用execute(),因为我希望运行外部可执行文件的进程在继续在主进程中执行之前完成。然而,我尝试了这三种方法,希望找到一个包含文本“1”的文件a.txt,但它不存在。关于它为什么不起作用有什么帮助或建议吗?谢谢

在main()函数中检查.txt文件是否确实存在并且在写入之前已打开

在执行之前,在Qt中检查“程序”文件是否确实存在

从main()-函数返回不同的结果代码,并在Qt中检查结果:

QProcess *proc = new QProcess();

proc->start(program);
proc->waitForFinished();

QString result=proc->readAllStandardOutput();

// Check result here

QProcess::execute
是一个静态函数,因此您不必创建
QProcess
的新实例。只是澄清一下-您希望调用程序在继续执行之前等待进程完成吗?您确定可执行文件的路径正确吗?您从哪个目录运行父程序(如果
a.txt
a.out
的目录不同,它可能在该目录中)。如果进程运行成功,它将在
QDir::current()
中创建输出。我很确定您没有在那里查找输出文件。@Sam,是的,我希望调用程序只有在子进程完全完成后才能保持执行。我只是使用文件系统搜索来查找a.txt,因为它不在我所期望的任何位置。不过我还是很感激你的建议!非常感谢您的帮助。在您的测试程序中,尝试写入特定路径(例如/tmp/a.txt)。当我从命令行独立于Qt运行可执行文件时,它工作正常,如果该文件不存在,则创建一个.txt。只是当我尝试从Qt运行它时,什么都没有发生。你能解释一下为什么使用
proc->start(程序)吗;proc->waitForFinished()而不仅仅是
过程->执行(程序)?感谢示例代码是从我的工作代码中复制的。我认为使用
QProcess::execute
只是为了方便,所以如果您只想运行流程并等待它完成,就不必创建新的
QProcess
对象。如果你想读取进程的输出或做任何更复杂的事情,那么你可以像@PetriPyöriä那样做。因此,当我尝试你的解决方案时,我从我的程序QString中删除了绝对路径。。。这就是问题所在。你的答案有效。谢谢你们两个!
QProcess *proc = new QProcess();

proc->start(program);
proc->waitForFinished();

QString result=proc->readAllStandardOutput();

// Check result here