#c #qt #gnuplot #octave
#c #qt #gnuplot #октава
Вопрос:
У меня есть приложение QT C , которое запускает программу Octave с использованием QProcess. Я могу взаимодействовать с ним, считывая стандартный вывод / ошибку и записывая в его стандартный ввод, используя метод write (например: octave->write(«5 5 n»);).
Как я уже говорил вам, я получаю ответ от octave (из приведенного выше примера я получаю «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);
Здесь я пишу команды для процесса octave:
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");
И, наконец, я использую это при запуске процесса octave:
QString gnuplot_path(tr(""/usr/bin/gnuplot""));
QString gnuplot_cmd(tr("gnuplot_binary(%1)n").arg(gnuplot_path));
octave->write(gnuplot_cmd.toAscii());
Я буду признателен за любую помощь, которую вы могли бы мне оказать.
Заранее спасибо.
Ответ №1:
Octave, как и Matlab, может запускаться в пакетном режиме для выполнения вычислений без графического интерфейса. Я предполагаю, что Octave обнаруживает, что он не запускается из интерактивного сеанса, и поэтому автоматически переходит в пакетный режим. Можно было бы ожидать, что Octave будет подавлять графический вывод (например, вывод gnuplot) при работе в пакетном режиме.
Попробуйте перевести Octave в интерактивный режим с помощью --interactive
опции командной строки: http://www.gnu.org/software/octave/doc/interpreter/Command-Line-Options.html
Комментарии:
1. Большое вам спасибо за ваш ответ… это сработало! И теперь я понимаю октаву немного лучше…
Ответ №2:
Я знаю, что вы, вероятно, уже решили свою проблему, но это может быть полезно для других… Вы можете попробовать добавить команду для сохранения вашего графика во временной папке в вашем запросе octave. Затем отобразите график в своей точке доступа
Комментарии:
1. На самом деле хорошая идея, если вы хотите лучше контролировать отображение данных.