现在的位置: 首页 > 综合 > 正文

QwtPlot 实例

2013年01月19日 ⁄ 综合 ⁄ 共 2082字 ⁄ 字号 评论关闭

该实例绘制了两条sin曲线并自动刷新曲线显示,一个曲线跟前篇一样是平缓曲线,另一条是硬拐点曲线,之后按动按键使两个曲线均向右平移,注意,同时移动多条曲线的情况下不要使用setData函数了,程序会错误退出,应该使用setSamples函数,具体参见代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <Qt/qmath.h>
#include <QVector>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_magnifier.h>
#include <qwt_plot_panner.h>
#include <qwt_legend.h>
#include <qwt_point_data.h>
namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    QwtPlotCurve curve;
    QwtPlotCurve curve_r;//硬折点曲线画布
    QVector<double> xs;
    QVector<double> ys;
};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHBoxLayout>
#include <QtGui/QApplication>
#include <Qt/qmath.h>
#include <QVector>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_magnifier.h>
#include <qwt_plot_panner.h>
#include <qwt_legend.h>
#include <qwt_point_data.h>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->plot->resize(640,400);
    ui->plot->setAutoReplot(true);
    //设置坐标轴的名称
    ui->plot->setAxisTitle(QwtPlot::xBottom, "x->");
    ui->plot->setAxisTitle(QwtPlot::yLeft, "y->");
    //设置坐标轴的范围

    ui->plot->setAxisScale(QwtPlot::yLeft, -1.0, 1.0);
    //设置右边标注
    ui->plot->insertLegend(new QwtLegend(), QwtPlot::RightLegend);

    //使用滚轮放大/缩小
    (void) new QwtPlotMagnifier( ui->plot->canvas() );

    //使用鼠标左键平移
    (void) new QwtPlotPanner( ui->plot->canvas() );

    //计算曲线数据

    for (double x = 0; x < 2.0 * M_PI; x+=(M_PI / 10.0))
    {
        xs.append(x);
        ys.append(qSin(x));
    }
    //平滑曲线
    curve.attach(ui->plot);//把曲线附加到plot上
    curve.setSamples(xs,ys);
    curve.setStyle(QwtPlotCurve::Lines);//设置曲线上是点还是线,默认是线,所以此行可不加
    curve.setCurveAttribute(QwtPlotCurve::Fitted, true);//使曲线更光滑,不加这句曲线会很硬朗,有折点
    curve.setPen(QPen(Qt::blue));//设置画笔

    curve_r.attach(ui->plot);
    curve_r.setSamples(xs,ys);
    curve_r.setPen(QPen(Qt::green));


}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{

    for(int i=ys.count()-1;i>=1;i--)
    {
        ys[i]=ys.at(i-1);
    }
    ys[0]=0.5;
    curve.setSamples(xs,ys);
    curve_r.setSamples(xs,ys);
}

下面是按动按钮几次后的截图:

注意两条线不同的过渡变化

抱歉!评论已关闭.