我有个奇怪的问题。QProcess只是不起作用!
错误是未知的。
头中有全局变量
QProcess *importModule;A我得到了这个函数(我尝试了start和startDetached方法)
void App::openImport(){
importModule = new QProcess();
importModule->setWorkingDirectory(":\\Resources");
importModule->startDetached("importdb_module.exe");
QMessageBox::information(0,"",importModule->errorString());
}它输出那个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文件(运行前妻)?( QProcess也尝试过,不起作用)
发布于 2013-11-09 08:39:40
startDetached()是一种静态方法,根本不对importModule进行操作。它开始了一个过程,然后停止了关心。因此,importModule中的error()importModule()与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。
https://stackoverflow.com/questions/19873912
复制相似问题