如何在Qt应用程序中通过终端命令运行分离的应用程序

How to run a detached application by terminal command in Qt application?

本文关键字:应用程序 命令 终端 运行 分离 Qt      更新时间:2023-10-16

我想使用命令:

cd /opencv/opencv-3.0.0-alpha/samples/cpp/
./cpp-example-facedetect lena.jpg

在Qt应用程序中的button的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.

我该怎么修?如果我做的不对,请给我另一种方法。提前谢谢你!

我认为这里有两个问题:

首先,您的QProcess process2可能在完成之前就超出了范围(即,由于超出范围而被销毁)。您要么必须等待它完成(使用waitForFinished(),要么将其作为指针或成员变量(以更改作用域),然后将finished()信号连接到某个处理槽(可以进行整理)。

这里的另一件事是,看起来你只想设置工作目录,所以我不认为将cd命令管道传输到你的可执行文件中是可行的,这样做会更容易:

编辑

我编辑了我的例子,向您展示如何获得输出:

QProcess myProc;
qDebug() << "Starting processn";
// 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 processn";
// Setup the working directory
QDir::setCurrent("D:\software\qtTest");
// Start the process (uses new working dir)
myProc.startDetached("test.bat");

现在我不能100%确定你能从这个过程中得到输出。。。它现在与你的Qt应用程序无关。。。