qt gnuplot实例使用变量设置xrange [英] qt gnuplot instance set xrange with variables

查看:67
本文介绍了qt gnuplot实例使用变量设置xrange的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我基本上只是开始使用 Gnuplot ,并且在尝试设置 xrange/yrange 时,我不知道如何设置变量范围.

I basically just started using Gnuplot and in trying to set xrange/yrange I am not able to find out how to set variable bounds.

例如: instance<<"set yrange [-10:10]" 效果很好

instance<<没有设置yrange [yrange1:yrange2] .

yrange1,yrange2 是存储用户输入的变量.这样,用户可以确定gnuplot的范围

yrange1, yrange2 are variables in which user input is stored. That way the user can decide the bounds for gnuplot

有没有简单的方法可以做到这一点?

Is there a simple way to do this?

对不起.这是代码

qtgnuplotlib-example.cpp

qtgnuplotlib-example.cpp

//#include <QApplication>
#include "visualization.h"

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuBar);
    Visualization v;
    v.show();

    return app.exec();
}

visualization.h

visualization.h

#ifndef VISUALIZATION_H
#define VISUALIZATION_H

#include <QMainWindow>
#include <QtGnuplot/QtGnuplotWidget.h>
#include <QtGnuplot/QtGnuplotInstance.h>

namespace Ui {
class Visualization;
}

class Visualization : public QMainWindow
{
    Q_OBJECT

public:
    explicit Visualization(QWidget *parent = 0);
    ~Visualization();

private:
    QtGnuplotWidget *widget;
    QtGnuplotInstance *instance;

protected:
    bool eventFilter(QObject *obj, QEvent *event);


private slots:
    void on_actionExit_triggered();

    void on_actionOpen_triggered();

    void on_pushButton_clicked();

private:
    Ui::Visualization *ui;
};

#endif // VISUALIZATION_H

visualization.cpp

visualization.cpp

#include <QFileDialog>
#include <QFile>
#include <QMessageBox>
#include <QTextStream>
#include <QString>
#include "visualization.h"
#include "ui_visualization.h"

using namespace std;

Visualization::Visualization(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Visualization)
{
    ui->setupUi(this);
    widget = new QtGnuplotWidget();
    widget->installEventFilter(this);
    widget->setStatusLabelActive(true);
    instance = new QtGnuplotInstance();
    instance->setWidget(widget);
}

Visualization::~Visualization()
{
    delete ui;
    delete instance;
    delete widget;
}

void Visualization::on_actionExit_triggered()
{
    qApp->quit();
}

void Visualization::on_actionOpen_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open         File"), QString(),
            tr("All Files (*.*)"));

    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly)) {
            QMessageBox::critical(this, tr("Error"), tr("Could not open file"));
            return;
        }
        QTextStream in(&file);
        QString str = in.readAll();
        ui->equationsTxt->setText(str);
        file.close();
    }
}

bool Visualization::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::MouseButtonPress)
    {
        if (obj == this->widget) {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
            if (mouseEvent->button() == Qt::LeftButton) {
                ui->outputTxt->setText( this->widget->getStatusLabel()->text());
            }
        }
    }   
    return QObject::eventFilter(obj, event);
}



void Visualization::on_pushButton_clicked()
{
    widget->show();
    widget->resize(QSize(800,600));
    int yrange1 = 5;
    int yrange2 = 10;
   // *instance <<\
    //"set yrange [-1.5:1.5]\nset xrange [-1.5:1.5]\nset isosamples 500,500\nf(x,y)= x**2+y**2-1\nset contour\nset cntrparam levels discrete 0\nset view 0,0\nunset ztics\nunset surface\nsplot f(x,y)\n";
    //here is where I am stuck
    *instance << "set tics scale 0.75\nset xtics 1\nset ytics 1\nset yrange [-10:10]\nset xlabel 'x'\nset ylabel 'y'\nset zeroaxis\nplot \"<echo '1 2'\" notitle\n";
}

推荐答案

The QtGnuplotInstance class provides an exec method which you can pass a QByteArray with commands:

QtGnuplotInstance instance = new QtGnuplotInstance();
QString command;
QTextStream(&command) << "set yrange [" << yrange1 << ":" << yrange2 << "]";
instance.exec(command.toLocal8Bit());

我目前无法测试,但是方向应该正确.

I cannot test this at the moment, but the direction should be correct.

这篇关于qt gnuplot实例使用变量设置xrange的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆