用qwt绘制按秒采集数据波形图

来源:互联网 发布:淘宝免费开店 编辑:程序博客网 时间:2024/05/08 18:42

源码:

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <qwt_plot_zoomer.h>
#include <QTimer>
#include <qwt_plot_curve.h>
#include <QDateTime>
#include <qwt_scale_draw.h>
#include <qwt_legend.h>
#include <qwt_scale_widget.h>
namespace Ui {
    class myWidget;
}
class myWidget : public QWidget
{
    Q_OBJECT
public:
    explicit myWidget(QWidget *parent = 0);
    ~myWidget();
private:
    Ui::myWidget *ui;
    QwtPlotCurve *p_adplot;
    QTimer *PlotTimer;
    QPolygonF points;
    int xMaxScale;
public slots:
    void plotCurve();
};
#endif // MYWIDGET_H
头文件中主要设置变量名以及自定义一个槽函数很简单的
.cpp文件
#include "mywidget.h"
#include "ui_mywidget.h"
class TimeScaleDraw: public QwtScaleDraw
{
public:
    TimeScaleDraw()
    {
    }
    virtual QwtText label( double v ) const
    {
        QDateTime dt;
        dt.setTime_t((int)v);
        return dt.toString("yyyy-MM-dd\n hh:mm:ss");
    }
private:
    QDateTime baseTime;
};
myWidget::myWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::myWidget)
{
    ui->setupUi(this);
    ui->qwtPlot->insertLegend(new QwtLegend, QwtPlot::RightLegend);
    ui->qwtPlot->setAxisTitle(QwtPlot::xBottom, " System Uptime[yyyy-MM-dd\n hh:mm:ss]");
    ui->qwtPlot->setAxisScaleDraw(QwtPlot::xBottom,new TimeScaleDraw());
    ui->qwtPlot->setAxisScale(QwtPlot::xBottom, QDateTime::currentDateTime().toTime_t()-5, xMaxScale = QDateTime::currentDateTime().toTime_t());
    ui->qwtPlot->setAxisLabelAlignment(QwtPlot::xBottom, Qt::AlignHCenter | Qt::AlignBottom);
    ui->qwtPlot->canvas()->setFrameStyle( QFrame::NoFrame | QFrame::Plain );
    ui->qwtPlot->setCanvasBackground(Qt::blue);
    ui->qwtPlot->setTitle ("按秒采集数据波形图");
    QwtScaleWidget *scaleWidget = ui->qwtPlot->axisWidget(QwtPlot::xBottom);//设置坐标边距
    const int fmh = QFontMetrics(scaleWidget->font()).height();
    scaleWidget->setMinBorderDist(0, fmh / 2);
    ui->qwtPlot->setAxisTitle(QwtPlot::yLeft, "V");
    ui->qwtPlot->setAxisScale(QwtPlot::yLeft, 0, 3);
    p_adplot = new QwtPlotCurve("AD模拟采集");
    QColor c = Qt::red;
    p_adplot->setPen(c);
    p_adplot->attach(ui->qwtPlot);
    QwtPlotZoomer* zoomer = new QwtPlotZoomer( ui->qwtPlot->canvas() );
    zoomer->setRubberBandPen( QColor( Qt::black ) );
    zoomer->setTrackerPen( QColor( Qt::black ) );
    zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::RightButton, Qt::ControlModifier );
    zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::RightButton );
    //qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")+"fir";
    PlotTimer = new QTimer();
    connect(PlotTimer, SIGNAL(timeout()),this, SLOT(plotCurve()));
    PlotTimer->start(1000);
}
void myWidget::plotCurve()
{
    ui->qwtPlot->setAxisScale(QwtPlot::xBottom, QDateTime::currentDateTime().toTime_t()-5, xMaxScale = QDateTime::currentDateTime().toTime_t());
    //qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")+"sec";
    points<<QPointF(QDateTime::currentDateTime().toTime_t(),rand()%3);
    p_adplot->setSamples(points);
    p_adplot->attach(ui->qwtPlot);
    ui->qwtPlot->replot();
}
myWidget::~myWidget()
{
    delete ui;
}
0 0
原创粉丝点击