Октавный график из приложения Qt C

#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. На самом деле хорошая идея, если вы хотите лучше контролировать отображение данных.