我想使用命令:
cd /opencv/opencv-3.0.0-alpha/samples/cpp/
./cpp-example-facedetect lena.jpg
在Qt应用程序中的clicked()按钮方法上运行OpenCV的示例代码。 所以我用:
void MainWindow::on_btSample_clicked()
{
QProcess process1;
QProcess process2;
process1.setStandardOutputProcess(&process2);
process1.start("cd /opencv/opencv-3.0.0-alpha/samples/cpp");
process1.waitForBytesWritten();
process2.start("./cpp-example-facedetect lena.jpg");
}
我添加了必要的库来使用它。但是当我运行我的应用程序时出错。
QProcess: Destroyed while process ("./cpp-example-facedetect") is still running.
我该如何解决?如果我的方式不对,请给我另一种方式。提前谢谢你!
答案 0 :(得分:3)
我认为你有两个问题:
首先,你的QProcess process2
可能在它完成之前超出范围(即因为超出范围而被销毁)。您必须等待它完成(使用waitForFinished()
,或使其成为指针或成员变量(以更改范围)并将finished()
信号连接到某个处理槽(可以进行整理)向上)。
另一件事是,看起来你只是想设置工作目录,所以我不认为将cd命令输入到你的可执行文件是可行的方法,这样做会更容易:
修改强>
我编辑了我的示例,向您展示如何获得输出:
QProcess myProc;
qDebug() << "Starting process\n";
// Setup the working directory
QDir::setCurrent("D:\\software\\qtTest");
// Start the process (uses new working dir)
myProc.start("test.bat");
myProc.waitForFinished();
qDebug() << myProc.readAll();
我在大约2分钟内把它撞到了我的窗户盒上并为你测试了......我可以在linux上做到这一点但是这会花费我一点时间,因为我必须启动它:o ...但是如果你愿意的话。
编辑2
如果您想完全分离该过程:
QProcess myProc;
qDebug() << "Starting process\n";
// Setup the working directory
QDir::setCurrent("D:\\software\\qtTest");
// Start the process (uses new working dir)
myProc.startDetached("test.bat");
现在我不是100%确定你可以从流程中获得输出...它现在与你的Qt应用程序无关......