График на октави от Qt C++ приложение

Имам 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());

Ще оценя всяка помощ, която можете да ми окажете.

Благодаря предварително.


person Holland Salazar    schedule 11.04.2011    source източник


Отговори (2)


Octave, подобно на Matlab, може да се изпълнява в пакетен режим за извършване на изчисления без графичен потребителски интерфейс. Предполагам, че Octave открива, че не се изпълнява от интерактивна сесия и следователно автоматично преминава в пакетен режим. Бихте очаквали Octave да потисне графичния изход (напр. изход на gnuplot), когато е в пакетен режим.

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

person ypnos    schedule 11.04.2011
comment
Благодаря ви много за отговора... проработи! И сега разбирам октавата малко повече... - person Holland Salazar; 12.04.2011

Знам, че вероятно вече сте решили проблема си, но това може да е полезно за други... Можете да опитате да добавите команда за запазване на вашия график във временна папка във вашата заявка за октава. След това покажете графиката във вашия ап

person greg    schedule 09.05.2011
comment
Всъщност добра идея, ако искате по-добър контрол върху показването на данните. - person ypnos; 05.10.2011