qt gnuplot实例用变量设置xrange

时间:2016-01-19 18:42:06

标签: qt gnuplot

我基本上刚刚开始使用Gnuplot并试图设置xrange/yrange我无法找到如何设置变量边界。

例如:instance << "set yrange [-10:10]"完美无缺

instance << "set yrange [yrange1:yrange2]没有。

yrange1, yrange2是存储用户输入的变量。这样用户就可以决定gnuplot的界限

有一种简单的方法吗?

编辑:抱歉。这是代码

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

#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

#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";
}

1 个答案:

答案 0 :(得分:0)

QtGnuplotInstance class提供exec方法,您可以使用命令传递QByteArray

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

我现在无法测试,但方向应该是正确的。

相关问题