`
tcspecial
  • 浏览: 913866 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

QWT的使用

阅读更多

      QT下开源图表库比较少,用的比较多的就是QWT, QWT提供的API不够简洁,绘图过程也比较复杂. 这一点不如Java的JFreeChart方便.

 

一. 编译安装

     QWT最新版本是6.1, QWT5与QWT6一点也不兼容,windows下编译非常简单:

     cd $(QWT_ROOT)

     qmake 

     nmake 

     QWT5.1的版本支持VC6编译,QWT6只支持VS编译,不能用vc6编译.  

 

二. 编译运行

    vs编译示例代码,报错: moc_plot.obj : error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QwtPlot::staticMetaObject" (?staticMetaObject@QwtPlot@@2UQMetaObject@@B)

      解决方案: 在*.pro 加上QWT_DLL宏定义即可

 

三. 自定义XY轴

     示例代码分析发现,大部分示例xy轴都是默认double数据显示,可以通过子类化QwtScaleDraw来自定义xy轴显示数据,代码如下:

#include <QApplication>
#include <QTime>
#include <qwt/qwt_plot.h>
#include <qwt/qwt_plot_curve.h>
#include <qwt/qwt_legend.h>
#include <qwt/qwt_plot_grid.h>
#include <qwt/qwt_symbol.h>
#include <qwt/qwt_plot_zoneitem.h>
#include "plot.h"
#include <qwt/qwt_picker_machine.h>
#include <qwt/qwt_scale_draw.h>


// 自定义y轴的显示时标
class TimeScaleDraw: public QwtScaleDraw
{
public:
	TimeScaleDraw()
	{
	}

	virtual QwtText label( double v ) const
	{
		QDateTime dt;
		dt.setTime_t((int)v);
		return dt.toString("yyyy-MM-dd\n hh:mm:ss");
	}
private:
	QTime baseTime;
};


int GetTime(const QString &pTime)
{
	QDateTime dt=QDateTime::fromString(pTime,"yyyy-MM-dd hh:mm:ss");
	return dt.toTime_t();
}

int main(int argc,char **argv)
{
	QApplication app(argc,argv);

	QwtPlot plot;
	plot.setTitle("Plot Demo");
	plot.setCanvasBackground(Qt::white);
	plot.setAxisScale(QwtPlot::yLeft,0.0,10.0);
	plot.insertLegend(new QwtLegend(),QwtPlot::RightLegend);

	// 设置自定义的x坐标值(以时标为x轴)
	plot.setAxisScaleDraw( QwtPlot::xBottom,new TimeScaleDraw());
	plot.setAxisScale(QwtPlot::xBottom,GetTime("2013-09-29 00:00:00"), GetTime("2013-09-30 00:00:00"),14400); // 设置起始点

	// 网格
	QwtPlotGrid *grid=new QwtPlotGrid();
	//grid->setMajorPen( Qt::white, 0, Qt::SolidLine );
	//grid->setMinorPen( Qt::gray, 0 , Qt::SolidLine );
	grid->attach(&plot);

	// 数据标示带
	QwtPlotZoneItem* zone = new QwtPlotZoneItem();
	zone->setPen( Qt::darkGray );
	zone->setBrush( QColor( "#834358" ) );
	zone->setOrientation( Qt::Horizontal );
	zone->setInterval( 3.8, 5.7 );
	zone->attach(&plot);

	// 曲线
	QwtPlotCurve *curve=new QwtPlotCurve;
	curve->setTitle("Some Points");
	curve->setPen(Qt::blue,0.5);
	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.4 ) <<QPointF(0.6,3.9)<< QPointF( 1.0, 3.0 )
		<< QPointF( 2.0, 4.5 ) << QPointF( 3.0, 6.8 )
		<< QPointF( 4.0, 7.9 ) << QPointF( 5.0, 7.1 );
	*/

	points<<QPointF(GetTime("2013-09-29 00:00:00"),4.5)
		<<QPointF(GetTime("2013-09-29 04:00:00"),3.9)
		<<QPointF(GetTime("2013-09-29 08:00:00"),3.0)
		<<QPointF(GetTime("2013-09-29 12:00:00"),7.9);

	curve->setSamples( points );

        // 添加曲线
	curve->attach(&plot);

	// 曲线跟踪线(拷贝自$(QWT_ROOT)/playground/curvetracker)
	CurveTracker* tracker = new CurveTracker( plot.canvas() );
	tracker->setStateMachine( new QwtPickerTrackerMachine() );
	tracker->setRubberBandPen( QPen( "MediumOrchid" ) );

	plot.resize(600,400);
	plot.show();

	return app.exec();
}

 

    运行截图:

    

 

 

  • 大小: 26.2 KB
分享到:
评论
1 楼 tadpole_java 2015-04-22  
.qwt 是这样炼成的?好羡慕你们呀。

相关推荐

    qwt使用例子

    要使用Qwt绘制柱状图,你需要完成以下步骤: 1. **引入必要的头文件**:首先,在代码中包含必要的Qwt库头文件,例如`#include &lt;qwt_plot.h&gt;`和`#include &lt;qwt_plot_histogram.h&gt;`。 2. **创建QwtPlot对象**:在你...

    qt、qwt使用实例:三点组圆

    我在linux下使用qt开发,用到了qwt类库。功能是:给定三点,画出三角形、其内切圆和外接圆,画出图例、绘制坐标系,视图可以拖动、缩放。虽然是在linux下开发,但是qt和qwt都是可移植的,即源代码可以不用修改直接在...

    qwt-6.1.4源码

    6. **绘图引擎**:Qwt使用Qt的绘画API,如QPainter,进行图形绘制。这使得Qwt可以利用Qt的硬件加速特性,实现高性能的图形渲染。 7. **事件处理**:Qwt组件支持Qt的信号与槽机制,可以方便地响应用户的交互操作,如...

    QWT使用教程

    QWT,全称是 Qt Widgets for Technical Applications,是一个基于 LGPL 版权协议的 开源项目,可生成各种统计图。它为具有技术专业背景的程序提供 GUI 组件和一组实用类, 其目标是以基于 2D 方式的窗体部件来显示...

    QWT_6.1.4_SRC_QCH_PDF

    “qwt-6.1.4.pdf”和“qwt-1.4.qch”提供了详细的QWT使用指南和API参考。PDF文档通常包含了用户指南、安装步骤、示例代码等内容,方便开发者快速上手。而QCH文件则是Qt帮助查看器(Qt Assistant)支持的压缩帮助文件...

    qwt-4.2.0.zip

    这个特定的压缩包 "qwt-4.2.0.zip" 包含了 Qwt 库的版本 4.2.0,它是为Qt 3.x系列设计的,这意味着它适用于那些使用Qt 3.*版本的项目。Qwt库提供了丰富的图形控件和组件,尤其适合在嵌入式系统和桌面应用中构建数据...

    Qt,使用qwt作曲线图

    本教程将深入探讨如何在Qt项目中使用Qwt库来绘制曲线图。 首先,让我们了解Qwt。Qwt(Qt Widget Toolkit)是一个轻量级的库,它扩展了Qt的功能,添加了科学计算和工程图形的绘制能力。Qwt提供了一系列的类,如...

    qwt6.1.0使用帮助

    ### Qwt 6.1.0 使用帮助:深入解析与技术应用 #### 一、Qwt:Qt的第三方图形类库 Qwt是Qt的第三方图形类库,专门设计用于科学和技术应用程序,提供了丰富的功能来绘制和处理各种类型的数据图表。它支持线性图、...

    qwt编译好的24个例子和qwt.dll

    QWT,全称为Qt Widgets for Technical Applications,是一个开源库,专为使用Qt框架的开发者提供了一系列用于绘制2D图形和仪表盘的专业控件。这个压缩包包含的是已经编译好的QWT示例程序和QWT动态链接库(qwt.dll)...

    qwt-6.2+qt程序员+绘制波形及曲线

    Qwt 是一个开源库,专为Qt开发人员设计,用于在Qt应用程序中创建科学图表、曲线图、...这个压缩包“qwt-6.2”很可能包含了Qwt的源码、头文件、示例代码和文档,对于想要深入了解和使用Qwt的人来说是一份宝贵的资源。

    qwt-6.1.4.docx

    * 使用 QWT 绘制控件和 API * 自定义 QWT 绘制控件和 API QWT 的新特性 * 新的绘制控件和 API * 提高的绘制性能 * 支持新的绘制模型 * 新的图表和图形类型 QWT 的相关项目 * Qt * OpenGL * Doxygen * Qt Creator...

    QWT源码和QWT的一个小例子

    2. 引入QWT头文件:在你的Qt项目中,需要包含QWT对应的头文件,例如`#include &lt;qwt_plot.h&gt;`,这样就可以使用QWT提供的类和函数。 3. 创建QWT组件:接着,可以创建QWT的图形组件实例,比如`QwtPlot *plot = new ...

    QT中使用QWT实现一类柱状图多种颜色

    在本项目中,我们将讨论如何在Qt中使用QWT实现一类柱状图可以使用多种颜色表达,以及如何调整柱状体的宽度、X轴刻度偏移和柱状体的偏移。 首先,确保已经正确地在你的开发环境中配置了QWT库。对于VS2017 + Qt5.14.2...

    qwt-spectrogram.rar

    在本例中,"qwt-spectrogram.rar" 包含了一个示例,该示例已被修改以读取气象数据,这为我们提供了一个了解如何使用Qwt库处理和可视化实际数据的好机会。 首先,Qwt库的核心在于其图形组件,如曲线、图表、仪表盘等...

    qwt 安装配置说明(VS2010 + Qt-5.5.1 + qwt-6.1.3)

    为了能够在Qt Creator中正常使用QWT的组件,需要将一些必要的文件复制到Qt的安装目录下: 1. **Designer插件**:将`D:\qwt-6.1.3\designer\plugins\designer`下的`qwt_designer_plugin.dll`和`qwt_designer_plugin....

    qwt-6.1.4.rar

    标题中的"qwt-6.1.4.rar"表明这是一个QWT库的版本6.1.4的压缩文件,通常包含了库源代码、头文件、构建脚本等资源,方便开发者在自己的项目中集成和使用QWT。 QWT的核心特性包括各种图形组件,如图表、仪表盘、滑块...

    QT_QWT类使用方法总结

    ### QT_QWT类使用方法总结 #### 一、前言 在进行图形用户界面(GUI)开发时,尤其是涉及到数据可视化领域,QT结合QWT库提供了强大的工具支持。本文将重点介绍QT_QWT类的基本使用方法,特别是针对图表放大与缩小、...

    Qt中使用Qwt库绘制柱状图的经典例子

    本篇文章将深入探讨如何在Qt中使用Qwt库来绘制柱状图,帮助你掌握这一关键技能。 首先,安装Qwt库是必要的步骤。你可以从Qwt的官方网站下载源码,然后按照官方文档的指示进行编译和安装。确保将库添加到Qt的项目...

    qwt-6.1.3(包含windowS和linux的,和帮助文件)

    在 Linux 环境下,使用 Qwt 可能需要安装额外的依赖库,如 Qt 自身的库和开发工具。 "帮助文件" 提供了关于如何使用 Qwt 的文档和教程,包括类库的参考手册、示例代码和常见问题解答。这些文件对初学者和有经验的...

    QWT6.1.0编译后的文件附使用说明

    在实际使用中,开发者可以尝试将QWT6.1.0与他们正在使用的Qt5版本结合,以利用其丰富的图形功能。 该压缩包包含的文件大致可以分为以下几个部分: 1. **库文件**:编译后的QWT库,可能包含静态库(如libqwt.a或....

Global site tag (gtag.js) - Google Analytics