转自 http://blog.csdn.net/evense/article/details/10087501
QwtPlot是用来绘制二维图像的widget。在它的画板上可以无限制的显示绘画组件。绘画组件可以是曲线(QwtPlotCurve)、标记(QwtPlotMarker)、网格(QwtPlotGrid)、或者其它从QwtPlotItem继承的组件。

QwtPlot拥有4个axes(轴线)

yLeft  Y axis left of the canvas.
yRight  Y axis right of the canvas.
xBottom  X axis below the canvas.
xTop  X axis above the canvas.

常用函数接口

setAxisTitle 设置轴标题
enableAxis 主要是显示xTop,yRight坐标轴
setAxisMaxMajor 设置某个某个坐标轴扩大比例尺的最大间隔数目
setAxisMaxMinor 设置某个某个坐标轴缩小比例尺的最大间隔数目
setAxisScale 禁用自动缩放比例尺,为某个坐标轴指定一个修改的比例尺
insertLegend 添加图例(标注)

常用组件

QwtPlotCurve 曲线
QwtPlotMarker 标记
QwtPlotGrid 网格
QwtPlotHistogram 直方图
other 从QwtPlotItem继承的组件
QwtPlotItem plot能显示的类,如果想要实现自己绘画图形,要继承此类实现rtti和draw接口
QwtPlotPanner 平移器    (用鼠标左键平移)
QwtPlotMagnifier  放大器    (用鼠标滚轮缩放)
QwtPlotCanvas 画布
QwtScaleMap 比例图---可以提供一个逻辑区域到实际区域的坐标转换
QwtScaleWidget 比例窗口
QwtScaleDiv 比例布局
QwtLegent 标注
QwtPlotLayout 布局管理器
QwtScaleDraw 自画坐标轴

QwtPlotCure简介

setPen 设置画笔
setData 设置曲线的数据
setStyle 设置曲线形式,点、直线、虚线等等
setCurveAttribute 设置曲线属性,一般设置Fitted
attch 把曲线附加到QwlPlot上
下面看一个小例子,结果如下:
 
源代码:
[cpp]  view plain copy
  1. #include <QtGui/QApplication>
  2. #include <Qt/qmath.h>
  3. #include <QVector>
  4. #include <qwt_plot.h>
  5. #include <qwt_plot_curve.h>
  6. #include <qwt_plot_magnifier.h>
  7. #include <qwt_plot_panner.h>
  8. #include <qwt_legend.h>
  9. int main(int argc, char *argv[])
  10. {
  11. QApplication a(argc, argv);
  12. QwtPlot plot(QwtText("CppQwtExample1"));
  13. plot.resize(640,400);
  14. //设置坐标轴的名称
  15. plot.setAxisTitle(QwtPlot::xBottom, "x->");
  16. plot.setAxisTitle(QwtPlot::yLeft, "y->");
  17. //设置坐标轴的范围
  18. plot.setAxisScale(QwtPlot::xBottom, 0.0, 2.0 * M_PI);
  19. plot.setAxisScale(QwtPlot::yLeft, -1.0, 1.0);
  20. //设置右边标注
  21. plot.insertLegend(new QwtLegend(), QwtPlot::RightLegend);
  22. //使用滚轮放大/缩小
  23. (void) new QwtPlotMagnifier( plot.canvas() );
  24. //使用鼠标左键平移
  25. (void) new QwtPlotPanner( plot.canvas() );
  26. //计算曲线数据
  27. QVector<double> xs;
  28. QVector<double> ys;
  29. for (double x = 0; x < 2.0 * M_PI; x+=(M_PI / 10.0))
  30. {
  31. xs.append(x);
  32. ys.append(qSin(x));
  33. }
  34. //构造曲线数据
  35. QwtPointArrayData * const data = new QwtPointArrayData(xs, ys);
  36. QwtPlotCurve curve("Sine");
  37. curve.setData(data);//设置数据
  38. curve.setStyle(QwtPlotCurve::Lines);//直线形式
  39. curve.setCurveAttribute(QwtPlotCurve::Fitted, true);//是曲线更光滑
  40. curve.setPen(QPen(Qt::blue));//设置画笔
  41. curve.attach(&plot);//把曲线附加到plot上
  42. plot.show();
  43. return a.exec();
  44. }

转自http://blog.csdn.net/zhx6044/article/details/9114733

学习这个东西方向对了,就对了一半

今天我开始学习基于qt库的一个开源的绘制2维的统计图的库--qwt。

我们画东西首先要有一个容器,不然都是徒劳,今天我们就介绍这个类--QwtPlot

它继承自QFrame和QwtPlotDict,QFrame提供一个QWidget的框架,QwtPlotDict为QwtPlot管理在其中的plot items,就是绘制的项。在QwtPlot上我们可以绘制无限多个的plot items,这些plot items可以是曲线,标记,格子以及继承自QwtPlotItem的子类。一个QwtPlot可以有四个轴,每个plot item连接到x和y轴上。在轴上的比例变换可以使用QwtScaleDiv,对于plot items比例可以使用QwtScaleEngine来计算,在每个轴上,QwtScaleEngine可以被单独设置。

在QwtPlot中有两个枚举类型。

Axis,轴,5个值,一个QwtPlot除了x和y,还有top和bottom轴,第五个是axisCnt,轴数,枚举从0开始,第五个为4,说明一共四个轴。另一个是LegendPosition,图例的位置。

它有五个值,分别指定插入一个图例仔什么位置,四个都是和x和y轴的位置有关,最后一个是特殊的,它允许不在这个Plot中,就是外部的。

这是今天写的一个小例子

[cpp] view plaincopyprint?
  1. /************************************************
  2. *
  3. *author:周翔
  4. *e-mail:604487178@qq.com
  5. *blog:http://blog.csdn.net/zhx6044
  6. *
  7. *
  8. *************************************************/
  9. #ifndef PLOT_H
  10. #define PLOT_H
  11. #include <qwt_plot.h>
  12. #include <qwt_plot_curve.h>
  13. #include <qwt_plot_picker.h>
  14. #include <qwt_plot_panner.h>
  15. #include <qwt_plot_magnifier.h>
  16. #include <qwt_legend.h>
  17. #include <qwt_plot_grid.h>
  18. #include <qwt_picker_machine.h>
  19. class Plot : public QwtPlot
  20. {
  21. Q_OBJECT
  22. public:
  23. explicit Plot(QWidget *parent = 0);
  24. ~Plot();
  25. signals:
  26. public slots:
  27. private:
  28. QwtPlotCurve *sinCurve;
  29. QwtPlotCurve *cosCurve;
  30. QwtPlotPicker *picker;
  31. void initCanvas();
  32. void initAxes();
  33. void initCurves();
  34. };
  35. #endif // PLOT_H
  36. /************************************************
  37. *
  38. *author:周翔
  39. *e-mail:604487178@qq.com
  40. *blog:http://blog.csdn.net/zhx6044
  41. *
  42. *
  43. *************************************************/
  44. #include "plot.h"
  45. double _sin2(double x)
  46. {
  47. return ::sin(2 * x);
  48. }
  49. /**
  50. * @brief The FunctionData class 将一个函数包装一下,就像一个函数对象一样,但是又不一样,没有基于运行符()重载
  51. * 而是基于多态,我们只需要继承它,实现相关的虚函数即可,它内部有自己的调用规则
  52. */
  53. class FunctionData: public QwtSyntheticPointData
  54. {
  55. public:
  56. FunctionData(double(*y)(double)):
  57. QwtSyntheticPointData(100),
  58. d_y(y)
  59. {
  60. }
  61. virtual double y(double x) const
  62. {
  63. return d_y(x);
  64. }
  65. private:
  66. double(*d_y)(double);
  67. };
  68. Plot::Plot(QWidget *parent) :
  69. QwtPlot(parent)
  70. {
  71. initCanvas();
  72. }
  73. Plot::~Plot()
  74. {
  75. }
  76. void Plot::initCanvas()
  77. {
  78. //右键拖拽
  79. (new QwtPlotPanner(this->canvas()))->setMouseButton(Qt::RightButton);
  80. //y轴在放大的时候,坐标不变化
  81. (new QwtPlotMagnifier(this->canvas()))->setAxisEnabled(QwtPlot::yLeft,false);
  82. //一个选择器,十字线,以xBottom和yLeft坐标
  83. picker = new QwtPlotPicker(QwtPlot::xBottom, QwtPlot::yLeft,
  84. QwtPlotPicker::CrossRubberBand, QwtPicker::AlwaysOn,
  85. this->canvas());
  86. picker->setStateMachine(new QwtPickerDragPointMachine());//拖拽点起作用
  87. picker->setRubberBandPen(QPen(QColor(Qt::white)));
  88. picker->setTrackerPen(QColor(Qt::yellow));
  89. setAutoFillBackground(true);
  90. this->canvas()->setPalette(QPalette (QColor(Qt::darkCyan)));
  91. setTitle("sin(x) and cos(x)");
  92. //这个会根据画板中的图在RightLegend显示一个图例
  93. insertLegend(new QwtLegend(),QwtPlot::RightLegend);
  94. QwtPlotGrid *grid = new QwtPlotGrid;//网格
  95. grid->enableXMin(true);
  96. grid->setMajPen(QPen(Qt::white, 0, Qt::DotLine));//大格子
  97. grid->setMinPen(QPen(Qt::gray, 0 , Qt::DotLine));//大格子里的小格子
  98. grid->attach(this);
  99. initAxes();
  100. initCurves();
  101. }
  102. void Plot::initAxes()
  103. {
  104. setAxisTitle(QwtPlot::yLeft, QObject::trUtf8("y 轴"));
  105. setAxisScale(QwtPlot::yLeft, -1.0, 1.0);
  106. setAxisTitle(QwtPlot::xBottom,QObject::trUtf8("x 轴"));
  107. setAxisScale(QwtPlot::xBottom,-5.0,5.0);
  108. }
  109. void Plot::initCurves()
  110. {
  111. sinCurve = new QwtPlotCurve("y = sin(2x)");
  112. //切换渲染提示 启用抗锯齿
  113. sinCurve->setRenderHint(QwtPlotItem::RenderAntialiased);
  114. sinCurve->setLegendAttribute(QwtPlotCurve::LegendShowLine);
  115. sinCurve->setPen(QPen(Qt::yellow));
  116. sinCurve->attach(this);
  117. cosCurve = new QwtPlotCurve("y = cos(x)");
  118. cosCurve->setRenderHint(QwtPlotItem::RenderAntialiased);
  119. //这个会改变曲线在QwtLegend显示的样式,可以是线,矩形,符号,
  120. cosCurve->setLegendAttribute(QwtPlotCurve::LegendNoAttribute);
  121. cosCurve->setPen(QPen(Qt::red));
  122. cosCurve->attach(this);
  123. sinCurve->setData(new FunctionData(_sin2));
  124. cosCurve->setData(new FunctionData(::cos));
  125. }

qwt-QwtPlot相关推荐

  1. QWT错误static struct QMetaObject const QwtPlot

    使用QWT例子oscilloscope出现如下错误: error LNK2001: unresolved external symbol "public: static struct QMe ...

  2. Qwt使用之QwtPlot

    QwtPlot是用来绘制二维图像的widget.在它的画板上可以无限制的显示绘画组件.绘画组件可以是曲线(QwtPlotCurve).标记(QwtPlotMarker).网格(QwtPlotGrid) ...

  3. 关于Qwt的使用-QwtPlot

    转自:http://blog.csdn.net/zhuyunfei/article/details/51150098 1.新建一个qt新工程,往主界面中拖动一个QwtPlot控件,保存后关闭.  ps ...

  4. Qwt笔记(二)之QwtPlot简单使用

    一.前言 文章只是楼主学习过程的记录,不能面面俱到,也不能每个点都讲到,不喜勿喷 二.QwtPlot是啥?? 文档是这样描述的: QwtPlot is a widget for plotting tw ...

  5. qt中label画圆代表指示灯_【Qt编程】基于QWT的曲线绘制及图例显示操作——有样点的实现功能...

    在<QWT在QtCreator中的安装与使用>一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能. 首先,我们新建一个Qt应用程序,然后一路默认即可.这时,你会发现总共有: ...

  6. 使用qwt作曲线图——有网格线背景的画法

    创建自己的QwtPlot (1)     增加一个类比如curvePlotWidget,继承自QwtPlot (2)代码示例 1 curvePlotWidget::curvePlotWidget(QW ...

  7. Qwt中如何在曲线上标定特定点

    发现 网上的资料越来越少了,只好自己看着QWT官方的Guidebook,一点点的摸索(手册写的真的有点表意不明) 首先要清楚QwtPlot是个容器类,就像一个画布一样 下面的代码就是在这个plot的为 ...

  8. qwt自定义时间标尺TimeScale

    需要重载QwtScaleDraw类的virtual QwtText label(double)const;方法 该方法在需要绘制scale label时会调用. 主要思路是标尺上的点对应QDateTi ...

  9. qwt的安装和移植-

    目须要依据实时数据绘制出图表,因此我们找到了qwt库.这个库是一个绘制图表,曲线图,柱状图的统计图标. . .. 以下我们就具体解说一下这个库在Larm上的编译和移植 qwt介绍 QWT,全称是Qt ...

  10. win7 下 qwt安装教程

    一.安装: qwt的安装很简单,可以参看它的install文档. 1.解开下载下来的zip文件,比如解开到d:\qt\qwt-5.0.2目录下,修改目录下的qwtconfig.pri文件里面的安装路径 ...

最新文章

  1. Difference Between InnoDb and MyISAM(个人觉着是好文章,简单易懂,推荐看)
  2. git 切换分支
  3. Python argparse模块基本用法
  4. windows下如何启动redis
  5. java有any类型吗_Java开发网 - 一个关于CORBA中any类型的问题
  6. 4线电子围栏安装示意图_知识积累|周界防护-脉冲电子围栏的安装
  7. 学以致用二十二-----写一个基本环境设置的脚本
  8. SQL Server群集共享存储迁移
  9. eNSP检测不到网卡信息——WinPacp
  10. (转)SqlServer基础之(触发器)(清晰易懂)
  11. 深度学习(一)神经网络中的池化与反池化原理
  12. 基于深度强化学习的离散自动生产线智能调度
  13. Html5视频播放代码
  14. 计算机组成原理补码位算法,[计算机组成原理] Booth算法 —— 补码一位乘法
  15. cov matlab,方差var、协方差cov、协方差矩阵(浅谈)-(二)_函数var
  16. 发布镜像【DockerHub或阿里云】
  17. UMLChina公众号文章精选(20210706更新精选)
  18. 运维需要懂产品和运营吗?
  19. 计算机鼠标不动了,计算机鼠标不动了怎么解决?
  20. 推荐算法最前沿|CIKM2020推荐系统论文一览

热门文章

  1. CSharp与Python中的输入输出语句对比
  2. Django中 form表单的使用
  3. 计算机应用能力考试多少选择题,计算机应用能力考试选择题汇总.doc
  4. 北京交通大学计算机学院 于剑,北京交通大学计算机与信息技术学院博导介绍:于剑...
  5. 北京交通大学JAVA期末考试_JAVA考试题求助
  6. APICloud AVM框架开发消防检查助手APP
  7. winform 鼠标 静止时间_双飞燕飞时代FG30S鼠标评测,谁说静音手感不两全?
  8. python log壁纸_python生成单词壁纸
  9. 360浏览器抢票专版官方版
  10. spring boot网上商品定制系统 毕业设计-附源码180915