QProcess未知错误

时间:2013-11-09 08:20:47

标签: c++ qt qprocess

我遇到了奇怪的问题。 QProcess不起作用!

错误未知。

我在标题中获得了全局变量

QProcess *importModule;

我得到了这个功能(我尝试了startstartDetached方法btw)

    void App::openImport(){
      importModule = new QProcess();
      importModule->setWorkingDirectory(":\\Resources");
      importModule->startDetached("importdb_module.exe");
      QMessageBox::information(0,"",importModule->errorString());
}

它jsut输出error is unknown。此外,它不会启动像

这样的其他前任
    void App::openImport(){
      importModule = new QProcess();
      importModule->setWorkingDirectory("C:\\Program Files\\TortoiseHg");
      importModule->startDetached("hg.exe");
      QMessageBox::information(0,"",importModule->errorString());
}

我做错了什么? 还有其他方法可以从我的程序中运行一些.exe吗? 或者也许是.bat个文件(运行exes)? (也试过QProcess,不工作)

1 个答案:

答案 0 :(得分:3)

startDetached()是一种静态方法,根本不会在importModule上运行。 它开始一个过程,然后停止照顾。因此importModule中的error()/ errorState()与startDetached()调用无关。你想要的是start()。 但是,由于QProcess是异步的,所以在start()返回后不会发生任何事情。您必须连接到started()error()finished()信号才能了解结果。

connect(importModule, SIGNAL(started()), this, SLOT(importModuleStarted()));
connect(importModule, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(importModuleFinished(int, QProcess::ExitStatus)));
CONNECT(importModule, SIGNAL(error(QProcess::ProcessError)), this, SLOT(importModuleError(QProcess::ProcessError)));
importModule->start(QStringLiteral("importdb_module"), QStringList());

或者,您可以使用阻塞等待功能:

importModule->start(QStringLiteral("importdb_module"), QStringList());
importModule->waitForStarted(); // waits until starting is completed
importModule->waitForFinished(); // waits until the process is finished

但是,我强烈建议不要在主线程中使用它们,因为它们会阻止UI。