У меня есть приложение 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());
Я буду признателен за любую помощь, которую вы могли бы мне оказать.
Заранее спасибо.