QProcess 未知错误
Posted
技术标签:
【中文标题】QProcess 未知错误【英文标题】:QProcess unknown error 【发布时间】:2013-11-09 08:20:47 【问题描述】:我遇到了奇怪的问题。 QProcess 只是不工作!
而且错误未知。
我在标题中有全局变量
QProcess *importModule;
我得到了这个功能(我尝试了 start
和 startDetached
方法 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 试过,不工作)
【问题讨论】:
【参考方案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以上是关于QProcess 未知错误的主要内容,如果未能解决你的问题,请参考以下文章
获得 95% 发出未命名的兼容插件错误:未知:未知错误,打开