windows下Qt插件qwt中plot编程

qt 5.4.1

Qt Creator 3.3.1 (opensource)Based on Qt 5.4.1 (MSVC 2010, 32 bit)

qwt 1.2.1

实现曲线实时更新显示,数值由随机数产生

.pro

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = qwt_test
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

INCLUDEPATH += E:\Qt\Qtctl\includes
#LIBS+= -lqwtd

LIBS += E:\Qt\Qtctl\build-qwt-Desktop_Qt_5_4_1_MinGW_32bit-Release\lib\libqwt.a\
        E:\Qt\Qtctl\build-qwt-Desktop_Qt_5_4_1_MinGW_32bit-Release\lib\libqwtd.a\
        E:\Qt\Qtctl\build-qwt-Desktop_Qt_5_4_1_MinGW_32bit-Release\lib\qwt.dll\
        E:\Qt\Qtctl\build-qwt-Desktop_Qt_5_4_1_MinGW_32bit-Release\lib\qwtd.dll
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <qtimer.h>

#define QWT_DLL
#include <qwt_plot.h>
#include <qwt_plot_layout.h>
#include <qwt_plot_canvas.h>
#include <qwt_plot_renderer.h>
#include <qwt_plot_grid.h>
#include <qwt_plot_histogram.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_zoomer.h>
#include <qwt_plot_panner.h>
#include <qwt_plot_magnifier.h>

#include <qwt_legend.h>
#include <qwt_legend_label.h>
#include <qwt_column_symbol.h>
#include <qwt_series_data.h>
#include <qpen.h>
#include <qwt_symbol.h>
#include <qwt_picker_machine.h>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private Q_SLOTS:
    void timerUpDate();
    void on_pushButton_clicked();

private:
    QwtPlotCurve curve;
    Ui::MainWindow *ui;
    QwtPlotPicker *picker;
    QTimer timer;
};

#endif // MAINWINDOW_H

mainwindow.cpp


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <vector>
#include <QVector>
using namespace std;
 
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
 
    connect(&timer,
            SIGNAL(timeout()),
            this,
            SLOT(timerUpDate())
            );
    timer.setInterval(50);
 
 
    ui->setupUi(this);
    ui->qwtPlot->setTitle("体积变化曲线");//图表标题设置
 
    /*---------设置画布---------*/
    QwtPlotCanvas *canvas = new QwtPlotCanvas();
    canvas->setPalette(Qt::white);
    canvas->setBorderRadius(10);
    ui->qwtPlot->setCanvas( canvas );
    //ui->qwtPlot—>setAlignCanvasToScales( true );
 
    /*-----------设置x,y坐标和范围--------------*/
    ui->qwtPlot->setAxisTitle(ui->qwtPlot->yLeft,
                              "体积/ml" );
    ui->qwtPlot->setAxisTitle(ui->qwtPlot->xBottom,
                              "时间/s" );
    ui->qwtPlot->setAxisScale(QwtPlot::yLeft,
                              0.0,
                              10.0);
    ui->qwtPlot->setAxisScale(QwtPlot::xBottom,
                              0.0,
                              30.0);
 
    /*----------------设置栅格线-------------------*/
    QwtPlotGrid *grid = new QwtPlotGrid;
    grid->enableX( true );//设置网格线
    grid->enableY( true );
    grid->setMajorPen( Qt::black,
                       0,
                       Qt::DotLine );
    grid->attach(ui->qwtPlot);
 
    /*----------------设置缩放-------------------*/
    QwtPlotMagnifier *magnifier = new QwtPlotMagnifier( ui->qwtPlot->canvas() );
    magnifier->setMouseButton( Qt::NoButton );
 
    //右键拖拽
    (new QwtPlotPanner(ui->qwtPlot->canvas()))->setMouseButton(Qt::RightButton);
 
    //一个选择器,十字线,以xBottom和yLeft坐标
    picker = new QwtPlotPicker(QwtPlot::xBottom,
                               QwtPlot::yLeft,
                               QwtPlotPicker::CrossRubberBand,
                               QwtPicker::AlwaysOn,
                               ui->qwtPlot->canvas());
 
    picker->setStateMachine(new QwtPickerDragPointMachine());//拖拽点起作用
    picker->setRubberBandPen(QPen(QColor(Qt::black)));
    picker->setTrackerPen(QColor(Qt::black));
    // picker->setMousePattern(Qt::LeftButton);
 
 
    /*-----------------画图曲线设置----------------------*/
 
    //curve.setTitle( "信道"+QString( "%1 " ).arg( 1));
 
    //这个会根据画板中的图在RightLegend显示一个图例
    ui->qwtPlot->insertLegend(new QwtLegend(),
                              QwtPlot::RightLegend);
    curve.setTitle("rand 0-9");//设置图例的标题
 
    curve.setPen(Qt::blue,2);//设置曲线颜色 粗细
    curve.setRenderHint(QwtPlotItem::RenderAntialiased,true);//线条光滑化
 
    QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse,
    //QBrush( Qt::black ), QPen( Qt::red, 0 ), QSize( 6, 6) );//设置样本点的颜色、大小
    QBrush( Qt::black ), QPen( Qt::red, 0 ), QSize( 3, 3) );//设置样本点的颜色、大小
    curve.setSymbol( symbol );//添加样本点形状
    //delete *symbol;
 
 
    /*QPolygonF points1, points2;//输入节点数据QPointF(x,y)
    QVector<QPointF> *points = new QVector<QPointF>();
    points->push_back(QPointF(1,0.1));
    points->push_back(QPointF(2,0.2));
    points->push_back(QPointF(3,0.3));
    points->push_back(QPointF(4,0.1));
    curve.setSamples(*points);
    curve.attach( ui->qwtPlot );*/
    /*
    curve->setSamples(points1);
        curve->attach( ui->qwtPlot );
    points1<<QPointF(8,0.1)<<QPointF(9,0.1)<<QPointF(10,0.3)<<QPointF(11,0.4)
           <<QPointF(12,0.5)<<QPointF(13,0.6)<<QPointF(14,0.7);
    curve->setSamples(points1);
        curve->attach( ui->qwtPlot );
    ui->qwtPlot->setAxisScale(QwtPlot::xBottom,5.0,10.0);
    */
    //delete canvas;
}
 
MainWindow::~MainWindow()
{
    delete ui;
    delete picker;
    //delete curve;
    timer.stop();
 
}
void MainWindow::timerUpDate()//定时器时间处理函数,画图
{
    static QVector<QPointF> points;// = new QVector<QPointF>();
 
    static QVector<double> data;
    static float Miny= 3.0;
    static float Maxy= 4.0;
    //ui->qwtPlot->setAxisScale(QwtPlot::yLeft,data.size(),data.size()-10);
    QwtScaleDiv QwtScaleDiv_temp;//临时变量,轴线的比例间隔类
 
    QwtScaleDiv_temp = ui->qwtPlot->axisScaleDiv(QwtPlot::xBottom);
 
    float  range = QwtScaleDiv_temp.range();//获取当前刻度前后间隔大小
 
    ui->qwtPlot->setAxisScale(QwtPlot::xBottom,//X轴刻度
                              data.size()-range,//最小刻度设置
                              data.size());//最大刻度设置
 
 
    float temp = qrand()%10;
 
    if(Miny > temp)
    {
        Miny = temp;
    }
 
    if(Maxy < temp)
    {
        Maxy = temp;
    }
    ui->qwtPlot->setAxisScale(QwtPlot::yLeft,//y轴刻度
                              Miny,
                              Maxy);
    data.push_back(temp);//数据采集
 
    points.push_back(QPointF(data.size()-1,data[data.size()-1]));
 
    curve.setSamples(points);
    curve.attach( ui->qwtPlot );//
    ui->qwtPlot->replot();//Plot重画
 
}
 
void MainWindow::on_pushButton_clicked()
{
    static int flag = 1;
    if( flag == 0 )
    {
        timer.stop();
        ui->pushButton->setText("start");
        flag=1;
    }
    else
    {
        timer.start();
        ui->pushButton->setText("stop");
        flag = 0;
    }
 
}
 mainwindow.ui 

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>555</width>
    <height>439</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <widget class="QwtPlot" name="qwtPlot">
    <property name="geometry">
     <rect>
      <x>50</x>
      <y>80</y>
      <width>461</width>
      <height>271</height>
     </rect>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>50</x>
      <y>20</y>
      <width>75</width>
      <height>23</height>
     </rect>
    </property>
    <property name="text">
     <string>start</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>555</width>
     <height>23</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <customwidgets>
  <customwidget>
   <class>QwtPlot</class>
   <extends>QFrame</extends>
   <header>qwt_plot.h</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>
 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值