来自Qt C ++应用程序的Octave图

时间:2011-04-11 10:53:17

标签: c++ qt gnuplot octave

我有一个使用QProcess运行Octave程序的QT C ++应用程序。我能够通过读取标准输出/错误并使用write方法写入标准输入来与之通信(例如:octave-> write(“5 + 5 \ n”);)。

正如我告诉你的那样,我从八度音中得到回应(从上面的例子我得到“ans = 10”)。

但是,当我写入Octave标准输入的命令具有“绘图”(例如,简单绘图([1 2 3 4 5]);)时,实际图形从不显示。我知道Octave运行gnuplot,我安装了它,还有gnuplot_x11。我甚至通过执行gnuplot_binary(“/ usr / bin / gnuplot”)来改变我的Octave过程中的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");

最后,我在八度音阶处理开始时使用它:

QString gnuplot_path(tr("\"/usr/bin/gnuplot\""));
QString gnuplot_cmd(tr("gnuplot_binary(%1)\n").arg(gnuplot_path));
octave->write(gnuplot_cmd.toAscii());

我将非常感谢你能给我的任何帮助。

提前致谢。

2 个答案:

答案 0 :(得分:3)

与Matlab一样,Octave可以在批处理模式下运行,无需图形用户界面即可执行计算。我假设Octave检测到它不是从交互式会话中运行,因此会自动进入批处理模式。当处于批处理模式时,您会期望Octave抑制图形输出(例如gnuplot输出)。

尝试使用--interactive命令行选项强制Octave进入交互模式: http://www.gnu.org/software/octave/doc/interpreter/Command-Line-Options.html

答案 1 :(得分:1)

我知道你可能已经解决了你的问题,但这可能对其他人有帮助... 您可以尝试添加命令以将您的绘图保存在八度音请求中的临时文件夹中。 然后在ap

中显示图表