《QWT在QtCreator中的安装与使用》一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能。

首先,我们新建一个Qt应用程序,然后一路默认即可。这时,你会发现总共有:mainwindow.h,mainwindow.cpp,main.cpp,mainwindow.ui四个文件。

然后,选中项目,添加新文件,添加一个c++类,我们假设命名为PlotLines,基类选择QwtPlot,选择继承自QWidget。

接着,在pro文件中添加

INCLUDEPATH +=D:\Qt\Qt5.3.0\5.3\msvc2010_opengl\include\QWT
                                         LIBS+= -lqwtd
      注意我这里是将绘制曲线单独用一个类PlotLines表示的,而不是向参考实例一样是直接放在其他类的内部。所以这里我们需要在类的头文件中添加关键性语句:
    #define QWT_DLL

最后,在主文件main.cpp中添加我们类的头文件,并在函数中生成该类的实例并显示,修改后的main.cpp文件如下所示:

  1. #include "mainwindow.h"
  2. #include <QApplication>
  3. #include"plotlines.h"
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication a(argc, argv);
  7. //    MainWindow w;//这里的主窗口我们没有使用,当然也可以在主窗口中显示曲线
  8. //    w.show();
  9. PlotLines line;
  10. line.show();
  11. return a.exec();
  12. }
PlotLines.h文件如下:
  1. #ifndef PLOTLINES_H
  2. #define PLOTLINES_H
  3. #define QWT_DLL
  4. #include<qwt_plot.h>
  5. #include <qwt_plot_layout.h>
  6. #include <qwt_plot_canvas.h>
  7. #include <qwt_plot_renderer.h>
  8. #include <qwt_plot_grid.h>
  9. #include <qwt_plot_histogram.h>
  10. #include <qwt_plot_curve.h>
  11. #include <qwt_plot_zoomer.h>
  12. #include <qwt_plot_panner.h>
  13. #include <qwt_plot_magnifier.h>
  14. #include <qwt_legend.h>
  15. #include <qwt_legend_label.h>
  16. #include <qwt_column_symbol.h>
  17. #include <qwt_series_data.h>
  18. #include <qpen.h>
  19. #include <qwt_symbol.h>
  20. #include <qwt_picker_machine.h>
  21. class PlotLines : public QwtPlot
  22. {
  23. Q_OBJECT
  24. public:
  25. explicit PlotLines(QWidget *parent = 0);
  26. private Q_SLOTS:
  27. void showItem(const QVariant &itemInfo, bool on);//点击图例,显示相应的曲线
  28. };
  29. #endif // PLOTLINES_H
PlotLines.cpp文件如下:
  1. #include "plotlines.h"
  2. PlotLines::PlotLines(QWidget *parent) :
  3. QwtPlot(parent)
  4. {
  5. setTitle("图的标题");
  6. //---------设置画布---------//
  7. QwtPlotCanvas *canvas=new QwtPlotCanvas();
  8. canvas->setPalette(Qt::white);
  9. canvas->setBorderRadius(10);
  10. setCanvas( canvas );
  11. plotLayout()->setAlignCanvasToScales( true );
  12. //-----------设置x,y坐标和范围--------------//
  13. setAxisTitle( QwtPlot::yLeft, "ylabel" );
  14. setAxisTitle( QwtPlot::xBottom, "xlabel" );
  15. setAxisScale(QwtPlot::yLeft,0.0,10.0);
  16. setAxisScale(QwtPlot::xBottom,0.0,10.0);
  17. //----------------设置栅格线-------------------//
  18. QwtPlotGrid *grid = new QwtPlotGrid;
  19. grid->enableX( true );//设置网格线
  20. grid->enableY( true );
  21. grid->setMajorPen( Qt::black, 0, Qt::DotLine );
  22. grid->attach( this );
  23. //-----------------开始画图----------------------//
  24. QwtPlotCurve *curve=new QwtPlotCurve("curve");
  25. // curve->setTitle( "信道"+QString( "%1 " ).arg( i+1));
  26. curve->setPen(Qt::blue,2);//设置曲线颜色 粗细
  27. curve->setRenderHint(QwtPlotItem::RenderAntialiased,true);//线条光滑化
  28. QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse,
  29. QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 6, 6) );//设置样本点的颜色、大小
  30. curve->setSymbol( symbol );//添加样本点形状
  31. QPolygonF points1, points2;//输入节点数据QPointF(x,y)
  32. points1<<QPointF(1,1)<<QPointF(2,2)<<QPointF(3,3)<<QPointF(4,4)<<QPointF(5,5)<<QPointF(6,6)<<QPointF(7,7);
  33. points2<<QPointF(1,2)<<QPointF(2,3)<<QPointF(3,4)<<QPointF(4,5)<<QPointF(5,6)<<QPointF(6,7)<<QPointF(7,8);
  34. curve->setSamples(points1);
  35. curve->attach( this );
  36. curve->setLegendAttribute(curve->LegendShowLine);//显示图例的标志,这里显示线的颜色。
  37. //曲线2的形状采用默认,即不单独设置画笔的颜色、样本点的显示
  38. QwtPlotCurve *curve2=new QwtPlotCurve("curve2");
  39. curve2->setSamples(points2);
  40. curve2->attach( this );
  41. curve2->setLegendAttribute(curve->LegendShowLine);
  42. //--------------设置图例可以被点击来确定是否显示曲线-----------------------//
  43. QwtLegend *legend = new QwtLegend;
  44. legend->setDefaultItemMode( QwtLegendData::Checkable );//图例可被点击
  45. insertLegend( legend, QwtPlot::RightLegend );
  46. connect( legend, SIGNAL( checked( const QVariant &, bool, int ) ),
  47. SLOT( showItem( const QVariant &, bool ) ) );//点击图例操作
  48. QwtPlotItemList items = itemList( QwtPlotItem::Rtti_PlotCurve );//获取画了多少条曲线,如果为获取其他形状,注意改变参数
  49. //  qDebug()<<items;
  50. for ( int i = 0; i < items.size(); i++ )
  51. {
  52. if ( i == 0 )
  53. {
  54. const QVariant itemInfo = itemToInfo( items[i] );
  55. QwtLegendLabel *legendLabel =
  56. qobject_cast<QwtLegendLabel *>( legend->legendWidget( itemInfo ) );
  57. if ( legendLabel )
  58. legendLabel->setChecked( true );//
  59. items[i]->setVisible( true );
  60. }
  61. else
  62. {
  63. items[i]->setVisible( false );
  64. }
  65. }
  66. this->resize(600,400);
  67. this->replot();
  68. setAutoReplot( true );//设置自动重画,相当于更新
  69. }
  70. //点击图例,显示相应的曲线
  71. void PlotLines::showItem(const QVariant &itemInfo, bool on)
  72. {
  73. QwtPlotItem *plotItem = infoToItem( itemInfo );
  74. if ( plotItem )
  75. plotItem->setVisible( on );
  76. }
其他的文件没有作任何改变,在此就不列出来了。显示结果如下图:
1、初始界面如下:

2、点击右上角的图例后:

本文所创建的PlotLines类,完成的功能如下:
1、坐标轴的绘制
2、根据数据点绘制相应的曲线
3、右上角的图例可以点击,并显示或隐藏对应曲线
 
 

原文:http://blog.csdn.net/tengweitw/article/details/41911035

转自:https://www.cnblogs.com/xiaomm/p/6326334.html

【Qt编程】基于QWT的曲线绘制及图例显示操作——有样点的实现功能的更多相关文章

  1. 【Qt编程】基于QWT的曲线绘制及图例显示操作

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

  2. 【Qt编程】QWT在QtCreator中的安装与使用

    由于导师项目的需要,需要画图,二维+三维.三维图我用的是Qt+opengl,二维图我决定使用qwt工具库来加快我的项目进展,毕竟还有期末考试.关于Qt+opengl的使用有时间的话以后再介绍.     ...

  3. QT下过多点的曲线绘制

    绘制过多点的曲线意义重大.但通过试验,QT的PainterPath不是很如意.当多段曲线围成一个区域时,PainterPath内并不包含该区域的所有面积,只包含曲线和其弦构成的面积. 为了解决这一问题 ...

  4. Java 网络编程 -- 基于TCP 模拟多用户登录

    Java TCP的基本操作参考前一篇:Java 网络编程 – 基于TCP实现文件上传 实现多用户操作之前先实现以下单用户操作,假设目前有一个用户: 账号:zs 密码:123 服务端: public c ...

  5. 基于canvas二次贝塞尔曲线绘制鲜花

    canvas中二次贝塞尔曲线参数说明: cp1x:控制点1横坐标 cp1y:控制点1纵坐标 x: 结束点1横坐标 y:结束点1纵坐标 cp2x:控制点2横坐标 cp2y:控制点2纵坐标 z:结束点2横 ...

  6. 【Qt编程】基于Qt的词典开发系列<十>--国际音标的显示

    在年前的一篇文章中,我提到要学习Qt.于是在这学期看了一个月的qt.现在大致对qt有了一些了解.但是现在导师又把我调到了android应用开发平台,所以说qt的学习要搁置了.本打算这学期做一个单词查询 ...

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

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

  8. 【Qt for Android】OpenGL ES 绘制彩色立方体

    Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...

  9. QT笔记(1)--QT编程环境搭建

    一.QT简介 Qt  是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...

随机推荐

  1. Nginx文章

    https://www.cnblogs.com/qfb620/p/5508468.html https://www.cnblogs.com/jiangwangxiang/p/8481661.html ...

  2. 基于TCP连接的socket套接字编程

    基于TCP协议的套接字编程(简单) 服务端 import socket server = socket.socket() server.bind( ('127.0.0.1', 9999) ) serv ...

  3. [视频教程] ubuntu系统下以守护进程方式安装使用Redis

    直接访问redis的中国官网,在下载部分,可以看到安装和使用的方式.wget http://download.redis.io/releases/redis-5.0.4.tar.gztar xzf r ...

  4. I2C硬件与模拟的区别

    硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C:一般也较为稳定,但是程序较为繁琐. 硬件(固件)I2C是直接调用内部寄存器进行 ...

  5. PageHelper分页(十)

    分页有两种: (1) 物理分页:物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页 ...

  6. 作业一(python初认识)

    一.python发展历史 1989,为了度过圣诞假期,Guido开始编写Python语言编译器.Python这个名字来自Guido的喜爱的电视连续剧<蒙蒂蟒蛇的飞行马戏团>.他希望新的语言 ...

  7. luoguP2597 [ZJOI2012]灾难

    题意 这题思路好奇怪啊 见到有向无环图显然是要拓朴排序,不妨按照被吃向吃连边,那么\(x\)灭绝当且仅当x的入点都灭绝,于是考虑怎样x的入点都灭绝 比如4号节点,它灭绝当且仅当2和3灭绝,2和3灭绝当 ...

  8. Linux 下 make 的时候,老是一堆warning

    用下面的方法只显示error : 1) export CFLAGS="-w" 2) ./configure 3) make

  9. Paper | No-reference Quality Assessment of Deblocked Images

    目录 故事背景 本文方法(DBIQ) 发表在2016年Neurocomputing. 摘要 JPEG is the most commonly used image compression stand ...

  10. (二十)golang--变量的作用域

    (1)函数内部申明/定义的变量叫局部变量,作用域仅限于函数的内部: (2)函数外部申明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域是整个程序: (3)如果变量是在一个代码 ...