Qwt框架练习1

来源:互联网 发布:Ubuntu sambaclient 编辑:程序博客网 时间:2024/05/25 19:56

Qwt比较好的博客

1.http://blog.hehehehehe.cn/a/12764.htm
2.http://blog.csdn.net/evense/article/details/10087501
3.http://blog.csdn.net/zhx6044/article/details/9114733
4.http://blog.csdn.net/e5Max/article/category/1304653
5.http://blog.csdn.net/lovebird_27/article/details/50440877(修改plot的放大和缩小的方式)

上面第5个博客是通过设置QwtPlotZoomer的各种参数来对放大和缩小plot的方式来进行设置,我这里补充一点对QwtPlotPanner和QwtPlotMagnifier设置,来改变放大和缩小plot的方式
如QwtPlotPanner默认是按住鼠标左键即可拖动plot,设置为按住鼠标右键同时按住键盘上的Ctrl键才能拖动plot

QwtPlotPanner *panner = new QwtPlotPanner(canvas);panner->setMouseButton(Qt::RightButton,Qt::ControlModifier);

设置按住键盘上的Alt键同时移动鼠标右键来放大和缩小plot

QwtPlotMagnifier *magnifier = new QwtPlotMagnifier(canvas);magnifier->setMouseButton(Qt::RightButton,Qt::AltModifier);

6.http://blog.csdn.net/wangfei19880117/article/details/36888417(用Qwt绘制正弦和余弦曲线)
这个实例展示了拖动QwtPlot上点的方法

仿照simpleplot

main.cpp

#include <QApplication>#include <qwt_plot.h>#include <qwt_legend.h>#include <qwt_plot_grid.h>#include <qwt_plot_curve.h>#include <qwt_symbol.h>int main(int argc, char *argv[]){    QApplication a(argc, argv);    QwtPlot plot;    //设置整个图形的标题    plot.setTitle("Plot Demo");    plot.setCanvasBackground(Qt::white);    //Y轴在左边,最小值为0.0,最大值为100.0,步长为10    plot.setAxisScale(QwtPlot::yLeft,0.0,100.0,10.0);    //X轴在左边,最小值为0.0,最大值为100.0,步长自动设置    plot.setAxisScale(QwtPlot::xBottom,0.0,100.0);    //插入一个图例,即程序右边显示的部分    plot.insertLegend(new QwtLegend());    //新建一个表格    QwtPlotGrid *grid = new QwtPlotGrid();    //将此QwtPlotItem添加到QwtPlot上面,QwtPlotGrid继承自QwtPlotItem    grid->attach(&plot);    //设置图像界面的大小,从QWidget继承下来    //曲线类    QwtPlotCurve *curve = new QwtPlotCurve();    //图例的标题    //继承制QwtPlotItem的方法    curve->setTitle("Some Points");    //设置曲线的颜色和宽度    curve->setPen(Qt::blue,4);    curve->attach(&plot);    //继承制QwtPlotItem类的方法    //设置提示并显示    curve->setRenderHint(QwtPlotItem::RenderAntialiased,true);    //画符号的类,用来显示点的样式    QwtSymbol *symbol = new QwtSymbol(QwtSymbol::Ellipse,QBrush(Qt::yellow),QPen(Qt::red,2),QSize(8,8));    curve->setSymbol(symbol);    QPolygonF points;//放点的一个集合类    points<<QPointF(0.0,4.0)<<QPointF(100.0,20.0);    curve->setSamples(points);    plot.resize(600,400);    plot.show();    return a.exec();}

这里写图片描述

Qwt动态显示数据

mainwindow.h(刷新整个mainwindow)

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <qwt_plot.h>#include <qwt_plot_curve.h>#include <QTimerEvent>class MainWindow : public QMainWindow{    Q_OBJECTpublic:    MainWindow(QWidget *parent = 0);    QwtPlot *plot;    QwtPlotCurve *curve;    ~MainWindow();private:    void timerEvent(QTimerEvent *);    double time[10];    double value[10];};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include <qwt_plot_canvas.h>#include <qwt_plot_grid.h>#include <qwt_plot_picker.h>#include <QPolygonF>#include <QColor>#include <QHBoxLayout>#include <QWidget>#include <QDebug>MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent){    QHBoxLayout *mainLayout = new QHBoxLayout();    QWidget *widget = new QWidget();    widget->setLayout(mainLayout);    setCentralWidget(widget);    plot = new QwtPlot(this);    plot->resize(600,400);    plot->setTitle("数据显示图");    //设置y轴的位置及标尺    plot->setAxisScale(QwtPlot::yLeft,0.0,10.0);    //设置x轴的位置及标尺    plot->setAxisScale(QwtPlot::xBottom,0.0,10.0);    mainLayout->addWidget(plot);    QwtPlotCanvas *canvas = new QwtPlotCanvas;    canvas->setBorderRadius(10);    plot->setCanvas(canvas);    plot->setCanvasBackground(QColor("white"));    QwtPlotGrid *grid = new QwtPlotGrid();    grid->setMajorPen( Qt::black, 0, Qt::DotLine );    grid->attach(plot);    curve = new QwtPlotCurve;    for(int i=0; i<10; i++)        time[i] = i + 1;    double value[10] = {6,1,4,8,5,2,1,3,2,10};    //x轴y轴数据及长度    curve->setSamples(time,value,10);    //把曲线和图联系起来    curve->attach(plot);    //从QObject的函数,应该是每隔一秒刷新一次MainWidnow,要想轻量级的显示可以使用QTimer    startTimer(1000);}MainWindow::~MainWindow(){}//时间到的时候,自动触发的函数void MainWindow::timerEvent(QTimerEvent *event){    for(int i=0; i<9; i++)        value[i] = value[i+1];    value[9] = qrand() % 10;    curve->setSamples(time,value,10);    plot->replot();}

mianwindow.cpp(只刷新图的部分)

public:    MainWindow(QWidget *parent = 0);    QwtPlot *plot;    QwtPlotCurve *curve;    ~MainWindow();private slots:    void timerEvent();private:    double time[10];    double value[10];

mainwindow.cpp

    double value[10] = {6,1,4,8,5,2,1,3,2,10};    //x轴y轴数据及长度    curve->setSamples(time,value,10);    //把曲线和图联系起来    curve->attach(plot);    QTimer *time = new QTimer();    time->start(1000);    connect(time,SIGNAL(timeout()),this,SLOT(timerEvent()));
//时间到的时候,自动触发的函数void MainWindow::timerEvent(){    for(int i=0; i<9; i++)        value[i] = value[i+1];    value[9] = qrand() % 10;    curve->setSamples(time,value,10);    plot->replot();}

这里写图片描述
可以对线和点的样式进行设置,看下面的项目

0 0
原创粉丝点击