我遇到了奇怪的问题。 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());
}
它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,不工作)
答案 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。