我正在努力寻找解决问题的方法,但我根本不知道如何解决它。
我正在为我制作的某些程序创建一个用户界面(所以你可以通过简单地按一个按钮启动一个可执行文件)。 所以我想到了使用qt。
所以我读了很多关于QProcess的内容并尝试使用它。
在我的第一个可执行文件中,我尝试通过QProcess :: start()启动它,但它没有用,所以我用QProcess尝试了它:execute():
QProcess *proc = new QProcess(this);
QDir::setCurrent("C:\\DIRTOTHEEXE\\");
QString program="HELLO.exe";
proc->execute(program);
这完美地执行我的程序并且运行良好。
所以我尝试用我的其他exe做同样的事情,但它没有用
QProcess *myproc = new QProcess(this);
QDir::setCurrent("C:\\DIRTOTHEEXE\\");
QString program="HelloWorld.exe";
myproc->start(program);
被调用的可执行文件只打印“Hello World”并返回0。
所以现在我的问题是:什么可能导致这种行为,为什么我不能使用QProcess :: start()作为第一个可执行文件?
顺便说一句:我也尝试将workingDirectory()设置为exe的路径,但也没有用。
希望有人可以帮助我。
编辑: 所以程序执行但在打印出一行后立即崩溃。
编辑:这是HelloWorld来源。
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
cout<<"HELLO WORLD!!"<<endl;
return 0;
}
答案 0 :(得分:6)
QProcess有3个启动外部进程的功能,例如: -
后两个,execute和startDetached是静态的,所以不需要QProcess的实例来调用它们。
如果你使用start,你至少应该调用waitForStarted()来正确设置进程。 execute()函数将等待进程完成,因此不需要调用waitForStarted。
由于您只发布了少量代码,我们无法确切地看到您之后要做的事情。函数中的代码是否结束,或者您是否正在尝试检索进程的输出?如果是这样,如果使用start(),你肯定应该调用waitForStarted。
如果您只想在不等待它完成的情况下运行该过程,并且您的程序不关心与该过程进行交互,那么请使用startDetached: -
QProcess::startDetached("C:\\DIRTOTHEEXE\\HELLO.exe");