在 《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文件如下所示:

#include "mainwindow.h"
#include <QApplication>
#include"plotlines.h"
int main(int argc, char *argv[])
{QApplication a(argc, argv);
//    MainWindow w;//这里的主窗口我们没有使用,当然也可以在主窗口中显示曲线
//    w.show();PlotLines line;line.show();return a.exec();
}
PlotLines.h文件如下:
#ifndef PLOTLINES_H
#define PLOTLINES_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>
class PlotLines : public QwtPlot
{Q_OBJECT
public:explicit PlotLines(QWidget *parent = 0);private Q_SLOTS:void showItem(const QVariant &itemInfo, bool on);//点击图例,显示相应的曲线
};#endif // PLOTLINES_H
PlotLines.cpp文件如下:
#include "plotlines.h"PlotLines::PlotLines(QWidget *parent) :QwtPlot(parent)
{setTitle("图的标题");
//---------设置画布---------//QwtPlotCanvas *canvas=new QwtPlotCanvas();canvas->setPalette(Qt::white);canvas->setBorderRadius(10);setCanvas( canvas );plotLayout()->setAlignCanvasToScales( true );//-----------设置x,y坐标和范围--------------//setAxisTitle( QwtPlot::yLeft, "ylabel" );setAxisTitle( QwtPlot::xBottom, "xlabel" );setAxisScale(QwtPlot::yLeft,0.0,10.0);setAxisScale(QwtPlot::xBottom,0.0,10.0);//----------------设置栅格线-------------------//QwtPlotGrid *grid = new QwtPlotGrid;grid->enableX( true );//设置网格线grid->enableY( true );grid->setMajorPen( Qt::black, 0, Qt::DotLine );grid->attach( this );//-----------------开始画图----------------------//QwtPlotCurve *curve=new QwtPlotCurve("curve");// curve->setTitle( "信道"+QString( "%1 " ).arg( i+1));curve->setPen(Qt::blue,2);//设置曲线颜色 粗细curve->setRenderHint(QwtPlotItem::RenderAntialiased,true);//线条光滑化QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse,QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 6, 6) );//设置样本点的颜色、大小curve->setSymbol( symbol );//添加样本点形状QPolygonF points1, points2;//输入节点数据QPointF(x,y)points1<<QPointF(1,1)<<QPointF(2,2)<<QPointF(3,3)<<QPointF(4,4)<<QPointF(5,5)<<QPointF(6,6)<<QPointF(7,7);points2<<QPointF(1,2)<<QPointF(2,3)<<QPointF(3,4)<<QPointF(4,5)<<QPointF(5,6)<<QPointF(6,7)<<QPointF(7,8);curve->setSamples(points1);curve->attach( this );curve->setLegendAttribute(curve->LegendShowLine);//显示图例的标志,这里显示线的颜色。//曲线2的形状采用默认,即不单独设置画笔的颜色、样本点的显示QwtPlotCurve *curve2=new QwtPlotCurve("curve2");curve2->setSamples(points2);curve2->attach( this );curve2->setLegendAttribute(curve->LegendShowLine);//--------------设置图例可以被点击来确定是否显示曲线-----------------------//QwtLegend *legend = new QwtLegend;legend->setDefaultItemMode( QwtLegendData::Checkable );//图例可被点击insertLegend( legend, QwtPlot::RightLegend );connect( legend, SIGNAL( checked( const QVariant &, bool, int ) ),SLOT( showItem( const QVariant &, bool ) ) );//点击图例操作QwtPlotItemList items = itemList( QwtPlotItem::Rtti_PlotCurve );//获取画了多少条曲线,如果为获取其他形状,注意改变参数//  qDebug()<<items;for ( int i = 0; i < items.size(); i++ ){if ( i == 0 ){const QVariant itemInfo = itemToInfo( items[i] );QwtLegendLabel *legendLabel =qobject_cast<QwtLegendLabel *>( legend->legendWidget( itemInfo ) );if ( legendLabel )legendLabel->setChecked( true );//items[i]->setVisible( true );}else{items[i]->setVisible( false );}}this->resize(600,400);this->replot();setAutoReplot( true );//设置自动重画,相当于更新}
//点击图例,显示相应的曲线
void PlotLines::showItem(const QVariant &itemInfo, bool on)
{QwtPlotItem *plotItem = infoToItem( itemInfo );if ( plotItem )plotItem->setVisible( on );
}
其他的文件没有作任何改变,在此就不列出来了。显示结果如下图:
1、初始界面如下:

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

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

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

作者:nineheadedbird

【Qt编程】基于QWT的曲线绘制及图例显示操作相关推荐

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

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

  2. OpenGL编程指南5:学习绘制不同风格的曲线

    1.不同风格曲线绘制 #include <vgl.h> //宏定义;当定义的宏不能用一行表达完整时,可以用"\"表示下一行继续 #define drawOneLine( ...

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

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

  4. html中地图的绘制toolbars,tkinter内嵌Matplotlib系列(二)之函数曲线绘制

    目录 前言 前一章节,我们解读了tkinter内嵌Matplotlib的教程,了解其内嵌的原理,就是在tkinter创建matplotlib的画布控件,再利用其返回的画布对象进行绘图,其他附加功能,使 ...

  5. 第二章 Qt编程核心技术

    QT编程核心技术介绍 第二章 Qt编程核心技术 Qt/X11与Qt/Embedded版本的Qt类库,尽管类的底层实现有一些细微区别,但类的声明及方法函数是一样的,对于编写Qt应用程序的编程者来说,几乎 ...

  6. QT编程核心技术介绍

    第二章 Qt编程核心技术 Qt/X11与Qt/Embedded版本的Qt类库,尽管类的底层实现有一些细微区别,但类的声明及方法函数是一样的,对于编写Qt应用程序的编程者来说,几乎不需要关心这些区别,使 ...

  7. 跟着Nature学绘图!基于ggplot2的生存曲线绘制R包

    与传统的语言模型不同,深度学习的进步导致了一种新型的预测(自回归)深度语言模型(DLM).使用自我监督的下一个单词预测任务,这些模型在给定的上下文中生成适当的语言响应.在目前的研究中,九名参与者收听了 ...

  8. QT Creator 中QWT的安装

    QT是一个开源平台,网上可以找到很多优秀代码,有时候我们打开一些带有画线的项目时,代码中 #include <qwt_plot_curve.h> #include <qwt_plot ...

  9. 语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制

    01 研究背景 这是关于cox模型的第二篇文章,上一篇文章分享了运用Lasso回归如何筛选变量,将筛选后的变量绘制Nomogram图,本章分享构建模型后,如何绘制校准曲线. cox模型的验证不同于Lo ...

最新文章

  1. react中使用scss_我如何将CSS模块和SCSS集成到我的React应用程序中
  2. android ble5.0添加扫描过滤,bluetooth-lowenergy
  3. spring-MVC源码解读(一)
  4. Eclipse的部署项目时的配置
  5. gim-实时通讯框架
  6. SmartGit for Mac(图形化Git客户端)
  7. 使用ZbarSDK实现扫描二维码以及条形码功能(iOS)
  8. 浏览器自动打开html怎么办,浏览器自动弹出网页怎么处理?开机自动弹出垃圾网页如何解决?...
  9. MATLAB Simulink 中的过零检测与代数环
  10. 小程序与H5如何混合开发及WEUI那些事
  11. (生物信息学)R语言与统计学入门(十)—— 多因素Cox回归分析
  12. Must specify unique android:id, android:tag, or have a parent with an id for XXX
  13. oracle修复工具下载,Oracle数据库修复工具Stellar Phoenix Database Repair for Oracle
  14. Keras搭建神经网络BPNN(分类问题)
  15. 高效能人士的七个习惯之一由内而外的全面造就自己读后感
  16. php路由器怎么登录认证,无线路由器Web认证怎么设置 TP路由器启用Web认证功能图文教程...
  17. Non-local Neural Networks论文理解
  18. 有生之年转ta系列4pc手机图形api介绍
  19. 基于微信PC端小程序抓包方法
  20. 大数据测试--转载自开源优测

热门文章

  1. 小明发布_历时一年零四个月,付出终有回报!救助站无微不至的照顾,头条四次跟进发布寻亲信息,最终帮助受助青年找到家人...
  2. 干货| 乐队的混音应该如何改善?职业混音师的建议 MZD Studios
  3. GO语言基础之占位符
  4. 文秘专业计算机基础考题,文秘计算机测试题.doc
  5. 使用 T-SQL 语句完成单表数据检索
  6. java课题背景,办公自动化系统论文-课题研究的背景和意义及国内外发展状况.doc...
  7. Gephi画无向图和有向图(显示节点和边序号)
  8. 如何抛弃鼠标全键盘操作xcode
  9. 9.10 安卓常用工具类之一 对话 ---- DialogUtil
  10. tcp实时传输kafka数据_将物联网数据和MQTT消息流式传输到Apache Kafka