【问题标题】:Octave plot from Qt C++ application来自 Qt C++ 应用程序的八度图
【发布时间】:2011-08-02 23:28:49
【问题描述】:

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

正如我告诉你的那样,我得到了 octave 的响应(从上面的示例中,我得到“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);

这里我将命令写入八度进程:

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

如果您能给我任何帮助,我将不胜感激。

提前致谢。

【问题讨论】:

    标签: c++ qt gnuplot octave


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您的回答...成功了!现在我对八度的了解多了一点……
    【解决方案2】:

    我知道您可能已经解决了您的问题,但这可能对其他人有所帮助... 您可以尝试添加一个命令以将您的绘图保存在您的 octave 请求中的临时文件夹中。 然后在您的应用中显示图表

    【讨论】:

    • 如果您想更好地控制数据的显示,这实际上是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 2012-02-28
    • 2015-06-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2017-11-09
    相关资源
    最近更新 更多