首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QProcess未知误差

QProcess未知误差
EN

Stack Overflow用户
提问于 2013-11-09 08:20:47
回答 1查看 2.3K关注 0票数 1

我有个奇怪的问题。QProcess只是不起作用!

错误是未知的。

头中有全局变量

代码语言:javascript
复制
QProcess *importModule;

A我得到了这个函数(我尝试了startstartDetached方法)

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

它输出那个error is unknown。而且它也不会让其他的前任像

代码语言:javascript
复制
    void App::openImport(){
      importModule = new QProcess();
      importModule->setWorkingDirectory("C:\\Program Files\\TortoiseHg");
      importModule->startDetached("hg.exe");
      QMessageBox::information(0,"",importModule->errorString());
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-09 08:39:40

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

代码语言:javascript
复制
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());

或者,您可以使用阻塞等待函数:

代码语言:javascript
复制
importModule->start(QStringLiteral("importdb_module"), QStringList());
importModule->waitForStarted(); // waits until starting is completed
importModule->waitForFinished(); // waits until the process is finished

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19873912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档