QT:QPROCESS调用终端 +脚本

问题描述 投票:0回答:1

我在使用Qprocess时遇到了真正的麻烦,我查看了几个位置使用它,但是每次我使用它时,我的程序都会冻结,否则它没有做我想做的事情。

我想从GUI应用程序中做什么,如下:

更改为/用户/tim/等。 从那里我需要调用gnuplot并加载脚本。

我通常在终端窗口中会做的是以下内容:

> cd /Users/Tim/... > /opt/local/bin/gnuplot barchartscript.txt

在我使用系统呼叫来执行此操作的那一刻,但每个人都建议使用Qprocess,所以我想这样做。

我的代码现在如何使用QPROCESS:

QObject *parent; QProcess *process = new QProcess(parent); QString commands; QString changed = "cd /Users/Tim/etcetc"; commands = (changed + "&& /opt/local/bin/gnuplot scatterplotscriptwithout.txt").c_str(); process->start(commands);

有人可以告诉我怎么了?或在一个过程中执行多个命令的正确方法?
    

该片段可能有用(未经测试)。有关每种方法的详细信息,请参阅
c++ qt qprocess
1个回答
6
投票
文档。

process->setWorkingDirectory("/Users/Tim/etcetc"); process->setArguments(QStringList() << "scatterplotscriptwithout.txt"); process->start("/opt/local/bin/gnuplot");

eDit

在程序中看起来不错的另一件事是您作为Qprocess实例的父母提供的未定义指针。设置父母从自动儿童删除中受益很有用。在这种情况下,请注意自己删除Qprocess实例。

Edit2(错误处理)

QProcess *process = new QProcess; connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(handleError(QProcess::ProcessError)));

然后定义一个适当的插槽(此处handererror) void MyClass::handleError(QProcess::ProcessError error) { switch(error) { case QProcess::FailedToStart: qDebug() << "Failed to start, may be due to insufficient permissions"; break; case QProcess::Crashed: qDebug() << "Program crashed."; break; //debug each case.. } }

请参阅所有枚举值的细节。
如果您的QProcess正确结束但没有预期的输出,则可以查看过程的退出代码,并请参阅GNUPLOT MAN页面以获取信息。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.