Hol*_*zar 5 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);
Run Code Online (Sandbox Code Playgroud)
在这里我写命令到八度处理:
if (octave->state() == QProcess::Running) {
QString command = widget.txtInput->toPlainText();
if (command.isEmpty()) {
return;
}
command += "\n";
octave->write(command.toAscii());
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我打印了文本编辑的八度响应:
widget.txtOutput->append(octave->readAll() + "\n");
Run Code Online (Sandbox Code Playgroud)
最后,我在八度音程开始时使用它:
QString gnuplot_path(tr("\"/usr/bin/gnuplot\""));
QString gnuplot_cmd(tr("gnuplot_binary(%1)\n").arg(gnuplot_path));
octave->write(gnuplot_cmd.toAscii());
Run Code Online (Sandbox Code Playgroud)
我将不胜感激您能给我的任何帮助。
提前致谢。
Octave 与 Matlab 一样,可以以批处理模式运行,无需图形 UI 即可执行计算。我假设 Octave 检测到它不是从交互式会话运行,因此会自动进入批处理模式。您可能希望 Octave 在批处理模式下抑制图形输出(例如 gnuplot 输出)。
尝试使用--interactive命令行选项强制 Octave 进入交互模式:
http://www.gnu.org/software/octave/doc/interpreter/Command-Line-Options.html