Октавный сюжет из приложения Qt C ++ - PullRequest
4 голосов
/ 11 апреля 2011

У меня есть приложение 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"); из моего приложения. Я знаю, что это работает хорошо, потому что, если я получаю новое значение, я получаю это правильно. Но я не знаю, почему Октава не показывает графику.

Здесь я начинаю октаву:

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());

Буду признателен за любую помощь, которую вы мне можете оказать.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 11 апреля 2011

Octave, как и Matlab, можно запускать в пакетном режиме для выполнения вычислений без графического интерфейса пользователя. Я предполагаю, что Octave обнаруживает, что он не запускается из интерактивного сеанса, и поэтому автоматически переходит в пакетный режим. Можно ожидать, что Octave будет подавлять графический вывод (например, вывод gnuplot) в пакетном режиме.

Попробуйте перевести Octave в интерактивный режим, используя параметр командной строки --interactive: http://www.gnu.org/software/octave/doc/interpreter/Command-Line-Options.html

1 голос
/ 09 мая 2011

Я знаю, что вы, вероятно, уже решили свою проблему, но это может быть полезно для других ... Вы можете попытаться добавить команду для сохранения графика во временной папке в вашем запросе октавы.Затем отобразите график в вашем ap

...