【问题标题】:QProcess unknown errorQProcess 未知错误
【发布时间】:2013-11-09 08:20:47
【问题描述】:

我遇到了奇怪的问题。 QProcess 只是不工作!

而且错误未知。

我在标题中有全局变量

QProcess *importModule;

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

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

它只是输出error is unknown。它也不会启动其他 exe,例如

    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 试过,不工作)

【问题讨论】:

    标签: c++ qt qprocess


    【解决方案1】:

    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。

    【讨论】:

    • 哦,但是路径呢?我的意思是在这种情况下如何设置它们?
    • 啊,忘记传递可执行文件名了。固定。
    • 哦,谢谢,但我也指 .exe 的完整路径,或者它应该是这样的 QStringLiteral("somepath/importdb_module")?
    • 你可以在里面指定完整路径,或者通过qt-project.org/doc/qt-5.0/qtcore/qprocessenvironment.html修改PATH
    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2017-03-16
    • 2021-09-06
    • 2013-12-26
    相关资源
    最近更新 更多