我在使用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);
有人可以告诉我怎么了?或在一个过程中执行多个命令的正确方法?
该片段可能有用(未经测试)。有关每种方法的详细信息,请参阅
process->setWorkingDirectory("/Users/Tim/etcetc");
process->setArguments(QStringList() << "scatterplotscriptwithout.txt");
process->start("/opt/local/bin/gnuplot");
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页面以获取信息。