2013-08-06 60 views
4

我正在努力寻找解决方案来解决我的问题,但我完全不知道如何解决它。QProcess无法执行外部可执行文件

我正在为我制作的某些程序创建用户界面(因此您可以通过简单地按下按钮启动可执行文件)。 所以我想使用qt。

所以我读了很多关于QProcess并试图使用它。

在我的第一个可执行我试图通过QProcess中启动它::开始(),但它没有工作,所以我用QProcess中试了一下:执行():

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

嗯。它看起来像一个名为HelloWorld的程序会输出你所看到的'Hello World'。 – ExpatEgghead

+0

是的,它输出它,但它然后崩溃(并问我是否想发送报告给ms(不知道如何在英语中调用报告))。 – jj01

+0

helloworld.exe本身运行吗? – ExpatEgghead

回答

5

QProcess中具有用于开始外部流程3种的功能,如: -

  • 开始
  • 执行
  • startDetached

后两者,执行和startDetached是静态,所以不需要一个QProcess实例来调用它们。

如果使用start,至少应该调用waitForStarted()来让进程正确设置。 execute()函数将等待进程完成,因此不需要调用waitForStarted。

由于您只发布了少量代码,因此我们无法完全看到您之后要尝试执行的操作。该函数中的代码是否结束,或者您是否尝试检索过程的输出?如果是这样,你肯定应该调用waitForStarted如果使用start()。

如果你只想无需等待它完成,你的程序不打扰关于与过程交互运行过程中,然后使用startDetached: -

QProcess::startDetached("C:\\DIRTOTHEEXE\\HELLO.exe"); 
+0

我的计划是通过按下按钮来执行exe文件。 – jj01

+0

可执行文件应该完成,因为稍后它将创建一个新文档(通过按下按钮,它应该调用一个可执行文件,它将打开一个现有文件,对其进行更改并将更改存储在新文件中) – jj01

+1

除了waitForStarted之外,还有一个waitForFinished函数。此外,如果您实例化QProcess对象,请确保将插槽连接到其错误信号。 – TheDarkKnight