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(); }
运行截图:
相关推荐
要使用Qwt绘制柱状图,你需要完成以下步骤: 1. **引入必要的头文件**:首先,在代码中包含必要的Qwt库头文件,例如`#include <qwt_plot.h>`和`#include <qwt_plot_histogram.h>`。 2. **创建QwtPlot对象**:在你...
我在linux下使用qt开发,用到了qwt类库。功能是:给定三点,画出三角形、其内切圆和外接圆,画出图例、绘制坐标系,视图可以拖动、缩放。虽然是在linux下开发,但是qt和qwt都是可移植的,即源代码可以不用修改直接在...
6. **绘图引擎**:Qwt使用Qt的绘画API,如QPainter,进行图形绘制。这使得Qwt可以利用Qt的硬件加速特性,实现高性能的图形渲染。 7. **事件处理**:Qwt组件支持Qt的信号与槽机制,可以方便地响应用户的交互操作,如...
QWT,全称是 Qt Widgets for Technical Applications,是一个基于 LGPL 版权协议的 开源项目,可生成各种统计图。它为具有技术专业背景的程序提供 GUI 组件和一组实用类, 其目标是以基于 2D 方式的窗体部件来显示...
“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,它是为Qt 3.x系列设计的,这意味着它适用于那些使用Qt 3.*版本的项目。Qwt库提供了丰富的图形控件和组件,尤其适合在嵌入式系统和桌面应用中构建数据...
本教程将深入探讨如何在Qt项目中使用Qwt库来绘制曲线图。 首先,让我们了解Qwt。Qwt(Qt Widget Toolkit)是一个轻量级的库,它扩展了Qt的功能,添加了科学计算和工程图形的绘制能力。Qwt提供了一系列的类,如...
### Qwt 6.1.0 使用帮助:深入解析与技术应用 #### 一、Qwt:Qt的第三方图形类库 Qwt是Qt的第三方图形类库,专门设计用于科学和技术应用程序,提供了丰富的功能来绘制和处理各种类型的数据图表。它支持线性图、...
Qwt 是一个开源库,专为Qt开发人员设计,用于在Qt应用程序中创建科学图表、曲线图、...这个压缩包“qwt-6.2”很可能包含了Qwt的源码、头文件、示例代码和文档,对于想要深入了解和使用Qwt的人来说是一份宝贵的资源。
QWT,全称为Qt Widgets for Technical Applications,是一个开源库,专为使用Qt框架的开发者提供了一系列用于绘制2D图形和仪表盘的专业控件。这个压缩包包含的是已经编译好的QWT示例程序和QWT动态链接库(qwt.dll)...
* 使用 QWT 绘制控件和 API * 自定义 QWT 绘制控件和 API QWT 的新特性 * 新的绘制控件和 API * 提高的绘制性能 * 支持新的绘制模型 * 新的图表和图形类型 QWT 的相关项目 * Qt * OpenGL * Doxygen * Qt Creator...
2. 引入QWT头文件:在你的Qt项目中,需要包含QWT对应的头文件,例如`#include <qwt_plot.h>`,这样就可以使用QWT提供的类和函数。 3. 创建QWT组件:接着,可以创建QWT的图形组件实例,比如`QwtPlot *plot = new ...
在本项目中,我们将讨论如何在Qt中使用QWT实现一类柱状图可以使用多种颜色表达,以及如何调整柱状体的宽度、X轴刻度偏移和柱状体的偏移。 首先,确保已经正确地在你的开发环境中配置了QWT库。对于VS2017 + Qt5.14.2...
为了能够在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的压缩文件,通常包含了库源代码、头文件、构建脚本等资源,方便开发者在自己的项目中集成和使用QWT。 QWT的核心特性包括各种图形组件,如图表、仪表盘、滑块...
### QT_QWT类使用方法总结 #### 一、前言 在进行图形用户界面(GUI)开发时,尤其是涉及到数据可视化领域,QT结合QWT库提供了强大的工具支持。本文将重点介绍QT_QWT类的基本使用方法,特别是针对图表放大与缩小、...
本篇文章将深入探讨如何在Qt中使用Qwt库来绘制柱状图,帮助你掌握这一关键技能。 首先,安装Qwt库是必要的步骤。你可以从Qwt的官方网站下载源码,然后按照官方文档的指示进行编译和安装。确保将库添加到Qt的项目...
在实际使用中,开发者可以尝试将QWT6.1.0与他们正在使用的Qt5版本结合,以利用其丰富的图形功能。 该压缩包包含的文件大致可以分为以下几个部分: 1. **库文件**:编译后的QWT库,可能包含静态库(如libqwt.a或....
从部分预览内容可以了解到,文档中包含了QWT库的使用许可说明、新增功能的详细列表,以及各种图形绘制技术如曲线图、散点图、光谱图、等高线图、直方图等。文档还提供类的索引和类文档,这些都对于开发者来说是不可...
在 Linux 环境下,使用 Qwt 可能需要安装额外的依赖库,如 Qt 自身的库和开发工具。 "帮助文件" 提供了关于如何使用 Qwt 的文档和教程,包括类库的参考手册、示例代码和常见问题解答。这些文件对初学者和有经验的...