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

源码:

#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;
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值