八度曲线从Qt c++应用程序

Octave plot from Qt C++ application

本文关键字:Qt c++ 应用程序 曲线 八度      更新时间:2023-10-16

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

正如我告诉你的,我从octave获得响应(从上面的例子中,我得到"answers = 10")。

但是,当我写到Octave标准输入的命令有一个"plot"(例如,一个简单的plot([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);

我在这里写命令来设置进程的八度程:

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

我很感激你能给我的任何帮助。

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

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

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

中显示图形