5

我正在努力寻找解决问题的方法,但我根本不知道如何解决它。

我正在为我制作的一些程序创建一个用户界面(所以你可以通过简单地按下一个按钮来启动一个可执行文件)。所以我想到了使用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;
}
4

1 回答 1

6

QProcess 有 3 个函数用于启动外部进程,例如:-

  • 开始
  • 执行
  • 开始分离

后两者,execute 和 startDetached 是静态的,所以不需要 QProcess 的实例来调用它们。

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

由于您只发布了少量代码,因此我们无法确切了解您之后要做什么。该代码是否在结束的函数中,或者您是否正在尝试检索进程的输出?如果是这样,如果使用 start(),你肯定应该调用 waitForStarted。

如果你只想运行进程而不等待它完成并且你的程序不关心与进程交互,那么使用 startDetached: -

QProcess::startDetached("C:\\DIRTOTHEEXE\\HELLO.exe");
于 2013-08-06T08:46:00.257 回答