一、

1.下载地址https://sourceforge.net/projects/qwt/

2.注意:官方提供qt安装包creator都是用MSVC编译(包括mingW版)的,所以Creator的插件,必须使用MSVC编译,才能被识别。插件用什么编译的,建立项目就要使用对应的编译,才能识别出来。要想使用mingw,需要下载qt源代码用mingw编译安装。

3.用Qt打开qwt.pro,选择MSVC2017_32bit编译。

4.把生成的文件\designer\plugins\designer\qwt_designer_plugin.dll 复制到D:\ProgramFiles\Qt5.13.2\Tools\QtCreator\bin\plugins\designer 下面,打开Qt界面设计就可以看到有此插件。

5.lib\qwt.dll和lib\qwtd.dll 复制到D:\ProgramFiles\Qt5.13.2\5.13.2\msvc2017\bin; lib\qwt.lib和lib\qwtd.lib复制到D:\ProgramFiles\Qt5.13.2\5.13.2\msvc2017\lib;

6.在D:\ProgramFiles\Qt5.13.2\5.13.2\msvc2017\include新建一个文件qwt,把所有的头文件拷贝到此目录下。

7.新建Qt项目,在pro添加DEFINES += QT_DLL QWT_DLL

库引用:

win32:CONFIG(release, debug|release): LIBS += -LD:/ProgramFiles/Qt5./msvc2017/lib/ -lqwt
/msvc2017/lib/ -lqwtd

INCLUDEPATH += D:/ProgramFiles/Qt5./msvc2017/include/qwt
DEPENDPATH += D:/ProgramFiles/Qt5./msvc2017/include/qwt

二、

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QVector>
#include "qwt/qwt_plot.h"
#include "qwt/qwt_plot_curve.h"
#include "qwt/qwt_plot_grid.h"
#include "qwt/qwt_legend.h"
#include "qwt/qwt_plot_zoomer.h"
#include "qwt/qwt_plot_magnifier.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void qwtPlotTest();
private:
    Ui::MainWindow *ui;
private:
    QVector<double> xData;
    QVector<double> yData;
    QTimer updateTimer;
    QString demoName;
    QwtPlotCurve *curve;
    double getData(double interval);
    void showRealtimeData(QwtPlot *qwtPlot);
private slots:
    void slotUpdatedData();

    void on_pbUpdateData_clicked();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QTime>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->qwtPlot->move(,);
    ui->qwtPlot->resize(,);
   // qwtPlotTest();
    showRealtimeData(ui->qwtPlot);
}

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

void MainWindow::qwtPlotTest()
{
    ;
    ;

    //qDebug()<<width<<height;
    //移动QwtPlot控件到父窗口的0,0起始位
    ui->qwtPlot->move(,);
    //设置QwtPlot控件的大小
    ui->qwtPlot->resize(width,height);

    //参数是QString
    //ui->qwtPlot->setTitle(QObject::trUtf8("QwtPlot Test"));
    QwtText t;
    //设置标题名
    t.setText(QObject::trUtf8("QwtPlot Test"));
    //设置字体
    QFont font;
    //设置粗体
    font.setBold(true);
    //设置斜体
    font.setItalic(true);
    t.setFont(font);
    //设置颜色
    t.setColor(QColor(,,));

    //设置标题背景色
    QBrush brush(QColor(,,));
    t.setBackgroundBrush(brush);

    ui->qwtPlot->setTitle(t);

    //设置纵坐标
    //第一个参数表示坐标轴,
    //第二个参数表示坐标轴最小值
    //第三个参数表示坐标轴最大值
    //第四个参数表示步进
    //QwtPlot有四条坐标轴,分别对应如下
    //左坐标轴  QwtPlot::yLeft
    //右坐标轴  QwtPlot::yRight
    //底部坐标轴 QwtPlot::xBottom
    //顶部坐标轴 QwtPlot::xTop

    ui->qwtPlot->enableAxis(QwtPlot::yRight,true);
    ui->qwtPlot->enableAxis(QwtPlot::xTop,true);

    qDebug()<<ui->qwtPlot->axisEnabled(QwtPlot::yLeft);
    qDebug()<<ui->qwtPlot->axisEnabled(QwtPlot::xBottom);
    qDebug()<<ui->qwtPlot->axisEnabled(QwtPlot::yRight);
    qDebug()<<ui->qwtPlot->axisEnabled(QwtPlot::xTop);

    ui->qwtPlot->setAxisScale(QwtPlot::yLeft,,,);
    ui->qwtPlot->setAxisScale(QwtPlot::xBottom,,,);
    ui->qwtPlot->setAxisScale(QwtPlot::yRight,,,);
    ui->qwtPlot->setAxisScale(QwtPlot::xTop,,,);

    ui->qwtPlot->setAxisTitle(QwtPlot::yLeft,QObject::trUtf8("Left"));
    ui->qwtPlot->setAxisTitle(QwtPlot::yRight,QObject::trUtf8("Right"));
    ui->qwtPlot->setAxisTitle(QwtPlot::xBottom,QObject::trUtf8("Bottom"));
    ui->qwtPlot->setAxisTitle(QwtPlot::xTop,QObject::trUtf8("Top"));

    //微软雅黑
    //黑体
    QFont f();//Helvetica [Cronyx]
    ui->qwtPlot->setAxisFont(QwtPlot::xBottom,f);

    //数据x,y值保存
    QVector<QPointF> vector;
    ;i<;i++){
        QPointF point;
        point.setX(i);
        *sin(i*M_PI/) + ;
        point.setY(y);
        vector.append(point);
    }
    //构造曲线数据
    QwtPointSeriesData* series = new QwtPointSeriesData(vector);

    //create plot item
    QwtPlotCurve* curve1 = new QwtPlotCurve("Curve 1");
    //设置数据
    curve1->setData(series);
    //设置画笔
    curve1->setPen(QColor(,,),,Qt::SolidLine);
    //设置填充画刷
    QBrush brush2(QColor(,,));
    curve1->setBrush(brush2);
    //使曲线更光滑
    curve1->setCurveAttribute(QwtPlotCurve::Fitted, true);
    //把曲线附加到qwtPlot上
    curve1->attach(ui->qwtPlot);

    //数据x,y值保存
    QVector<QPointF> vector2;
    ;i<;i++){
        QPointF point;
        point.setX(i);
        *sin(i*M_PI/) + ;
        point.setY(y);
        vector2.append(point);
    }
    //构造曲线数据
    QwtPointSeriesData* series2 = new QwtPointSeriesData(vector2);
    //create plot item
    QwtPlotCurve* curve2 = new QwtPlotCurve("Curve 2");
    //设置数据
    curve2->setData(series2);
    //设置画笔
    curve2->setPen(QColor(,,),,Qt::DotLine);
    //设置填充画刷
    QBrush brush3(QColor(,,));
    curve2->setBrush(brush3);
    //把曲线附加到qwtPlot上
    curve2->attach(ui->qwtPlot);

    //加入网格
    QwtPlotGrid* grid = new QwtPlotGrid();
    grid->setPen(QColor(,,),);
    grid->attach(ui->qwtPlot);

    //删除所画的图形
    //curve1->detach();
    //curve2->detach();

    ui->qwtPlot->replot();
    ui->qwtPlot->show();
}

void MainWindow::showRealtimeData(QwtPlot *qwtPlot)
{
    //初始化xdata,x对应长度为5的坐标,y初始全为0
//    for(int i=1;i<5001;i++){
//       xData.append(double(i)/1000-5);
//       yData.append(0);
//    }

    demoName = "Real Time Data Demo";
    qwtPlot->setTitle(demoName);
    qwtPlot->setCanvasBackground(Qt::gray);//背景
    qwtPlot->insertLegend(new QwtLegend(),QwtPlot::RightLegend);//标签

    curve = new QwtPlotCurve();
    curve->setTitle("肌电信号");//曲线名字
    curve->setPen( Qt::yellow,  );//曲线的颜色 宽度;

    QTime curtime;
    curtime=curtime.currentTime();
    qwtPlot->setAxisTitle(QwtPlot::xBottom, "x- System Uptime");
    qwtPlot->setAxisTitle(QwtPlot::yLeft,"y-EMG");
    qwtPlot->setAxisScale(QwtPlot::yLeft,-,,);
    qwtPlot->setAxisScale(QwtPlot::xBottom,-,,);

    QwtPlotZoomer *zoomer = new QwtPlotZoomer( qwtPlot->canvas() );
    zoomer->setRubberBandPen( QColor( Qt::blue ) );
    zoomer->setTrackerPen( QColor( Qt::black ) );
    zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::RightButton, Qt::ControlModifier );
    zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::RightButton );
   //默认的滑轮及右键缩放功能  图形的整体缩放
    QwtPlotMagnifier *magnifier = new QwtPlotMagnifier( qwtPlot->canvas() );
    //设置哪个按钮与滑轮为缩放画布  如果不设置(注册掉当前行)按钮默认为滑轮以及右键为缩放
    //magnifier->setMouseButton(Qt::LeftButton);

    QwtPlotGrid *grid = new QwtPlotGrid();
    grid->enableX( true );//设置网格线
    grid->enableY( true );
    grid->setMajorPen( Qt::black, , Qt::DotLine );
    grid->attach(qwtPlot);

    connect(&updateTimer,SIGNAL(timeout()),this,SLOT(slotUpdatedData()));
    updateTimer.start();
}

double MainWindow::getData(double time)
{
    ) ;
    return s;

}
void MainWindow::slotUpdatedData()
{
    static QTime dataTime(QTime::currentTime());
    long int eltime = dataTime.elapsed();
    ;

    int size = (eltime - lastpointtime);

    ){//有数据传入
        yData.erase(yData.begin(),yData.begin()+size);//擦除多余的数据
        ;i<size+;i++){
            yData.append(getData(((()));
        }
        lastpointtime = eltime;
    }

    curve->setSamples(xData,yData);
    curve->attach(ui->qwtPlot);
    ui->qwtPlot->replot();
}

void MainWindow::on_pbUpdateData_clicked()
{
    //y:-2,2,1  -5,0,1
    )
    {
        yData.erase(yData.begin(),yData.begin()+);
    }
    yData.append(-);
    yData.append();
    yData.append(-);

    xData.append(-);
    xData.append(-);
    xData.append(-);

    curve->setSamples(xData,yData);
    curve->attach(ui->qwtPlot);
    ui->qwtPlot->replot();

}

qwt的更多相关文章

  1. Qt编译安装qwt错误moc/xxx Error:126

    最近搞设计,需要在上位机上绘制曲线,在网上找了找,发现python的matplotlib和Qt的qwt都不错,本着难度最小原则,选择了Qt下面的qwt,安装过程中遇到了编译错误:moc/xxx Err ...

  2. Qt之Qwt学习之安装

    QWT+qtcreator 编译.安装使用 目录:一.Qwt简介 二.QWT编译 一.Qwt简介 QWT:Qt Widgets for Technical Applications,是开源的2D绘图库 ...

  3. Qt Qwt之坐标轴移动

    最近接触到个pro需要做到这方面,于是找了相关材料,也跟好些人讨论,目前就最简单的使用方法,通过按钮触发去控制 X,Y轴的移动,比例自己定义 这个是X轴放大的 QwtInterval tempInte ...

  4. Qt Sqlite qwt 发布过程中碰到的问题runtime error

    qt版本:4.8.0 qwt版本:6.1.2 使用dll show检测缺少的dll,或者笨一点的方法,点击运行差什么找什么放进去: 左上显示exe调用哪些dll,右边是dll又再次调用啦哪些dll: ...

  5. windows 7下qtcreator里QWT文件的pro配置

    http://blog.chinaunix.net/uid-20717410-id-272331.html 把编译好的qwt的include文件夹下面 所有的.h文件 复制到qt目录下 然后在pro里 ...

  6. vs2012编译Qwt

    主题:vs2012编译Qwt ------------------------------------------------------------------------- 参照网络地址: htt ...

  7. ubuntu QWT Qt

    1,下载QWT 2,解压进入QWT的目录 3,qmake,生成makefile文件 4,编译,make 5,安装,make install ,需要root 安装好后会在 /usr/local 目录下有 ...

  8. qt creator中使用qwt插件

    前提:我用mingw编译的qwt. 将qwt插件集成到qt designer非常easy.仅仅要把qwt编译的qwt_designer_plugin.dll复制到C:\Qt\Qt5.3.1\5.3\m ...

  9. linux安装qwt插件linux

    Optional: Get, Compile, Install QWT 5.0.0 (or newer): * NOTE: You should not need to set the environ ...

  10. qt超强绘图控件qwt - 安装及配置

    qwt是一个基于LGPL版权协议的开源项目, 可生成各种统计图.它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式 ...

随机推荐

  1. TODO:AppiumTestDistribution--CapabilityManager 类

    该类代码详见git:https://github.com/AppiumTestDistribution/AppiumTestDistribution/tree/master/src/main/java ...

  2. python_网络编程struct模块解决黏包问题

    为什么会出现黏包现象: 首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候 ...

  3. 使用jaxb用xsd生成java类

    命令: xjc -p 包的路径 xsd的名字.xsd -d 目标的文件夹 具体详细见: http://www.iteye.com/topic/1118082

  4. c++对c的扩展----什么时候分配内存

    const分配内存的时机,编译器编译的时候分配内存 const相当于宏,用来取代c语言的#define #include<iostream> using namespace std; vo ...

  5. BZOJ 4129 Haruna’s Breakfast ( 树上带修莫队 )

    题面 求树上某路径上最小的没出现过的权值,有单点修改 添加链接描述 分析 树上带修莫队板题,问题是怎么求最小的没出现过的权值. 因为只有nnn个点,所以没出现过的最小值一定在[0,n][0,n][0, ...

  6. Verilog Tricks

    1,可用generate产生512*FIFO 2,Vivado的warning也要全部排除 3,小module测完再往大module加 4,复位和IDLE处的置零操作一定要写全了 5,设计通信接收机时 ...

  7. 彻底搞清楚setState

    setState最常见的问题是,是异步的还是同步的? setState在React.Component中的函数,是同步函数.但是我们调用的时候,不同的传参和不同的调用位置都会导致不同的结果. 从页面看 ...

  8. [git]一个本地仓库,多个远程仓库

    操作步骤如下: 1. 克隆某个远程仓库的代码到本地 git clone http://...... // 或者 git clone git@.... 2. 查看当前远程仓库地址 // 查看需要添加的远 ...

  9. Lock的lock/unlock, condition的await/singal 和 Object的wait/notify 的区别

    在使用Lock之前,我们都使用Object 的wait和notify实现同步的.举例来说,一个producer和consumer,consumer发现没有东西了,等待,produer生成东西了,唤醒. ...

  10. Java BIO、NIO、AIO 原理

    先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Ja ...