Имам QT C++ приложение, което изпълнява програмата Octave с помощта на QProcess. Мога да комуникирам с него, като прочета стандартния изход/грешка и пиша на неговия стандартен вход, използвайки метода за запис (например: octave->write("5 + 5\n");).
Както ви казах, получавам отговор от октава (от горния пример получавам "ans = 10").
Въпреки това, когато командата, която пиша на стандартния вход на Octave, има "графика" (например проста графика([1 2 3 4 5]);), действителната графика никога не се показва. Знам, че Octave изпълнява gnuplot, имам го инсталиран и gnuplot_x11 също. Дори променям двоичния път на gnuplot в моя Octave процес, като изпълнявам gnuplot_binary("/usr/bin/gnuplot"); от МОЯТА ПРИЛОЖЕНИЕ. Знам, че работи добре, защото ако извлека новата стойност, я получавам правилно. Но не знам защо Octave не показва графиката.
Тук започвам октава:
QStringList arguments;
arguments << "--persist";
octave->setProcessChannelMode(QProcess::MergedChannels);
octave->start("/usr/bin/octave", arguments);
Тук пиша команди за октавен процес:
if (octave->state() == QProcess::Running) {
QString command = widget.txtInput->toPlainText();
if (command.isEmpty()) {
return;
}
command += "\n";
octave->write(command.toAscii());
}
С това отпечатвам октавния отговор на редакция на текст:
widget.txtOutput->append(octave->readAll() + "\n");
И накрая, използвам това, когато процесът на октава започне:
QString gnuplot_path(tr("\"/usr/bin/gnuplot\""));
QString gnuplot_cmd(tr("gnuplot_binary(%1)\n").arg(gnuplot_path));
octave->write(gnuplot_cmd.toAscii());
Ще оценя всяка помощ, която можете да ми окажете.
Благодаря предварително.