Qt开发总结(21)——Qwt第三方绘图组件

更新时间:2023-07-25 16:55:35 阅读: 评论:0

Qt开发总结(21)——Qwt第三⽅绘图组件上两篇分别记录了Qt的⼆维图表charts和三维图表Data Visualization,我们已经有感于它的强⼤和⽅便,但是我还是想写⼀写我使⽤了N年之久的qwt,⼀款强⼤的第三库⽅Qt库表库,它⽀持从Qt4.4到Qt5的所有版本,具有丰富的图表类,在那个Qt Charts和Data Visualization还是收费内容的时代,真的为开发⼈员提供了很⼤的帮助。
下载与安装
本篇笔记涉及的qwt是qwt官⽅6.1.3版本,Qt版本是Qt5.9.7。可以到官⽹下载:
下载到的是源码,qwt并不提供编译好的库⽂件。于是我们需要做的第⼀件事就是结合本地的qt版本进⾏编译。我们下载到的zip压缩包解压缩到某⼀⽬录下,⽐如:C:/qwt-6.1.3/。打开qwtconfig.pri⼯程⽂件对⼯程进⾏配置,主要需要关系安装路径:
Install paths下有QWT_INSTALL_PREFIX    = C:/Qwt-$$QWT_VERSION字段,可以改为⾃⼰的安装路径。其他的可以不改,如果你确实只想编译其中的部分控件功能,可以在下⾯的QWT_CONFIG字段进⾏删减。
简单的配置或是不做任何配置后,⽤Qt Creator打开qwt.pro⼯程,⽤本地的编译器configure之后直接构建就好了。如果你⽤命令⾏的话,不论是在windows还是在linux下都类似:
1.qmake qwt.pro
⽣成了lib⽂件夹,内含Relea下使⽤的qwt.lib qwt.dll和debug模式下使⽤的qwtd.lib qwtd.dll⽂件。建议直接拷贝到安装⽬录下C:/qwt-6.1.3/。在具体使⽤时可以在VS中设置该lib路径,在windows环境变量中添加path中dll的路径,或将这些库⽂件拷贝到⼯程⽬录下即可使⽤。当然,还需要设置include的路径,即C:\qwt-6.1.3\include。
常⽤类汇总
QwtAbstractScale: 包含刻度尺的所有类的抽象基类
QwtAbstractScaleDraw: 绘制刻度尺的抽象基类
QwtAbstractSlider: 滑块部件的抽象基类
QwtAlphaColorMap: 可以改变颜⾊的alpha值
QwtAnalogClock: 时钟的模拟类
QwtArrayData: 包含2个QwtArray<double>实例的数据类
QwtArrowButton: 箭头按钮
QwtClipper: 剪贴板类围棋打谱
QwtColorMap: 提供数值到颜⾊的映射功能
QwtCompass: 指南针部件
QwtCompassMagnetNeedle: 指南针部件的磁针
QwtCompassRo: 罗盘部件的抽象基类
QwtCompassWindArrow: 风向标的指⽰器
QwtPlot: 地基容器,⾥⾯可放其他对象
QwtPlotItem: 负责控制绘图数据的产⽣和传递,并绘制⼀个坐标轴
QwtPlotCurve: 曲线类,⽤于绘制各种曲线
QwtPlotMarker: 标尺类,⽤于绘制刻度线
QwtData: 定义任何曲线类型的数据接⼝
幼儿园数学教案
QwtPlotGrid: ⽹格
QwtPlotHistogram: 直⽅图
QwtPlotBarChart: 条形图表与水有关的字
QwtPlotMultiBarChart: 成组的条形图表——堆叠或并排对齐
QwtPlotShapeItem: 显⽰矩形、圆、多边形和其他所有的形状的plot item,可以⽤QPainterPah表⽰
QwtPlotTextLabel: 和QwtPlotMarker相反,⽂本不是基于plot坐标排列,⽽是根据画布(canvas)的⼏何形状(geometry) QwtScaleTransformation已经被QwtTransform和QwtNullTransform、QwtLogTransform、QwtPowerTransform替换QwtDate: 在QDateTime和Double之间转换的⽅法的集合
QwtPlotPanner: 平移器(⽤⿏标左键平移)
QwtPlotMagnifier: 放⼤器(⽤⿏标滚轮缩放)
QwtPlotCanvas: 画布
QwtScaleMap: ⽐例图( 可以提供⼀个逻辑区域到实际区域的坐标转换 )
QwtScaleWidget: ⽐例窗⼝
QwtScaleDiv: ⽐例布局
QwtLegent: 标注
QwtPlotLayout: 布局管理器
QwtScaleDraw: ⾃画坐标轴
QwtAbstractScale: 包含刻度尺的所有类的抽象基类
QwtAbstractScaleDraw: 绘制刻度尺的抽象基类
QwtAbstractSlider: 滑块部件的抽象基类
QwtAlphaColorMap: 可以改变颜⾊的alpha值
QwtAnalogClock: 时钟的模拟类
QwtArrayData: 包含2个QwtArray<double>实例的数据类
QwtArrowButton: 箭头按钮
QwtClipper: 剪贴板类
QwtColorMap: 提供数值到颜⾊的映射功能
QwtCompass: 指南针部件
QwtCompassMagnetNeedle: 指南针部件的磁针
QwtCompassRo: 罗盘部件的抽象基类
QwtCompassWindArrow: 风向标的指⽰器
QwtPlot: 地基容器,⾥⾯可放其他对象
QwtPlotItem: 负责控制绘图数据的产⽣和传递,并绘制⼀个坐标轴
QwtPlotCurve: 曲线类,⽤于绘制各种曲线
QwtPlotMarker: 标尺类,⽤于绘制刻度线
QwtData: 定义任何曲线类型的数据接⼝
QwtPlotGrid: ⽹格
QwtPlotHistogram: 直⽅图
QwtPlotBarChart: 条形图表
QwtPlotMultiBarChart: 成组的条形图表——堆叠或并排对齐
QwtPlotShapeItem: 显⽰矩形、圆、多边形和其他所有的形状的plot item,可以⽤QPainterPah表⽰
QwtPlotTextLabel: 和QwtPlotMarker相反,⽂本不是基于plot坐标排列,⽽是根据画布(canvas)的⼏何形状(geometry)
QwtScaleTransformation已经被QwtTransform和QwtNullTransform、QwtLogTransform、QwtPowerTransform替换QwtDate: 在QDateTime和Double之间转换的⽅法的集合
QwtPlotPanner: 平移器(⽤⿏标左键平移)
QwtPlotMagnifier: 放⼤器(⽤⿏标滚轮缩放)
QwtPlotCanvas: 画布
QwtScaleMap: ⽐例图( 可以提供⼀个逻辑区域到实际区域的坐标转换 )
QwtScaleWidget: ⽐例窗⼝
QwtScaleDiv: ⽐例布局
QwtLegent: 标注
QwtPlotLayout: 布局管理器
QwtScaleDraw: ⾃画坐标轴
QwtPlot绘制⼆维曲线
⾃⼰编写了⼀个通过QwtPlot绘制⼆维曲线的定制类,该类中应⽤了QwtPlotGrid设置栅格显⽰,通过QwtLegend设置图例,通过QwtPlotCurve添加曲线,通过QwtText设置⽂字标注,通过QwtPlotZoomer设置区域缩放,通过QwtPlotRenderer把绘图区域⽣成pdf ⽂件,通过QwtPlotItem显⽰某点的坐标值等。效果图:
上源码:
//CPlot.h
#ifndef CPLOT_H
#define CPLOT_H
#include <QVector>
#include <qwt_plot.h>
#include <qwt_plot_grid.h>
#include <qwt_legend.h>
#include <qwt_legend_label.h>
#include <qwt_plot_legenditem.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_textlabel.h>
#include <qwt_plot_zoomer.h>
#include <qwt_scale_draw.h>
#include <qwt_plot_renderer.h>
#include <QMessageBox>
class CPlot : public QwtPlot
{
Q_OBJECT学校制度
public:
CPlot(QWidget *parent = 0);
virtual ~CPlot();
private:
int CurNum;
QVector<QwtPlotCurve *>  m_curve;
QwtPlotZoomer *m_zoomer[2];//绘图插件的⿏标放⼤缩⼩功能 QwtPlotTextLabel *InfoLabel;
private:
void InrtLegnd();
void SetZoom();
脸简笔画public:
virtual void replot();
virtual void replot();
神道教
void InrtCurve(QString Title, QColor color);
QwtPlotCurve *Curve(int nId);
void PlotCurve(const int curId, const double *xData, const double *yData, const int Len);
void PlotCurve(const int curId,  QVector<double> &xData, const QVector<double> &yData);
void InrtText(QString str, int pos);
void ClearCuerve();
void RemoveCurve(int id);
void ExportCurPdf();
private slots:
void showItem(const QVariant &itemInfo, bool on);
};
#endif // CPLOT_H
/
/CPlot.cpp
#include "cplot.h"
CPlot::CPlot(QWidget *parent)
: QwtPlot(parent),
CurNum(0)
{
//变量初始化
m_zoomer[0] = NULL;
m_zoomer[1] = NULL;
InfoLabel = new QwtPlotTextLabel();
//设置背景布
比例式
QLinearGradient gradient(0, 0, 0, 400); //背景布
诗经名词解释gradient.tColorAt(0, QColor(90, 90, 90));
gradient.tColorAt(0.38, QColor(105, 105, 105));
gradient.tColorAt(1, QColor(70, 70, 70));
this->tCanvasBackground(QBrush(gradient));
this->tAutoReplot( fal );
//设置⽹格
QwtPlotGrid *grid = new QwtPlotGrid;
grid->enableXMin( true );
grid->tMajorPen( Qt::gray, 0, Qt::DotLine );
grid->tMinorPen( Qt::darkGray, 0, Qt::DotLine );
grid->attach( this );
//⾃动适应的坐标轴设置
this->tAxisAutoScale(QwtPlot::yLeft, true);
this->tAxisAutoScale(QwtPlot::xBottom, true);
QwtScaleDraw *scaleDraw = axisScaleDraw(QwtPlot::yLeft);
if (scaleDraw)
{
scaleDraw->enableComponent(QwtAbstractScaleDraw::Backbone,fal);
}
//this->tAxisScaleDraw(QwtPlot::yLeft, )
//设置线宽
this->tLineWidth( 0 );
//图例
InrtLegnd();
//缩放
SetZoom();
}
void CPlot::InrtLegnd()
{
QwtLegend *legend = new QwtLegend;
legend->tDefaultItemMode(QwtLegendData::Checkable);
this->inrtLegend( legend,QwtPlot::BottomLegend);
connect(legend, SIGNAL(checked(const QVariant &, bool, int)),this,  SLOT(showItem(const QVariant &, bool))); }

本文发布于:2023-07-25 16:55:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1116720.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设置   区域   安装   曲线   绘制   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图