![](https://img-blog.csdnimg.cn/20200901104527647.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
QWT学习
分享自己对QWT源码的学习理解
贝勒里恩
用生命写代码,用灵魂做界面!
展开
-
QWT--入门教程
源码之下,没有秘密,推荐阅读源码学习!一、简介Qwt,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式提供, 输出方式可以是Curves(曲线),Slider(滚动条),Dials(圆盘),Compasses(仪表盘)等等。该工具库基于Qt开发,所以也继承了Qt的跨平台特性。.原创 2020-10-13 10:56:55 · 3309 阅读 · 0 评论 -
QWT--自定义图元项
源码之下,没有秘密,推荐阅读源码学习!一、分析QwtPlot视窗中可以贴无限的图元项,QWT库也提供了很多的图元项,例如曲线(QwtPlotCurve)、标记(QwtPlotMarker)、网格线(QwtPlotGrid)等等,但是这个库不是为你量身定做的,难免有时候满足不了你的需求,这个时候就需要根据自身需求自定义图元项了。二、自定义切线效果三、自定义流程2.1、创建一个类并继承自QwtPlotItem#pragma once#include <QWT\qwt_plot_it.原创 2020-10-13 11:39:48 · 994 阅读 · 5 评论 -
QWT--图形框选局部放大
源码之下,没有秘密,推荐阅读源码学习!链接:https://pan.baidu.com/s/1zlXTTQhD92X8G6PjDwf_Ag提取码:jmpq一、分析绘制好图形之后,如果有些我们关注的点不好分析,可能就需要局部放大,将我们关注的点所在区域进行局部放大。QWT库提供了QwtPlotZoomer类用于实现该操作,可以把它理解为一个栈,里面存放着我们框选的矩形,可以通过调整遍历栈的方向实现前进、后退操作。二、效果展示三、具体操作plot_zoomer = new QwtPlot.原创 2020-10-13 16:11:30 · 1947 阅读 · 0 评论 -
思想记录---QWT如何实现动态绘制曲线?
动画是怎么形成的?动画是由一张张图片快速切换形成的,可以借助此思想实现动态绘制曲线。策略:刚开始数据集只有一个数据点,将之设置(setSample(QVector<double>))到QwtPlotCurve并刷新(replot())视窗,此时视窗(QwtPlot)上就可以看见一个点;然后又有新数据更新,数据集中就有两个数据点,将之设置到QwtPlotCurve并刷新视窗,此时视窗上就可以看见两个点(或线段);以此类推,只要有数据更新,就设置一下QwtPlotCurve的数据并刷新视窗,只要速原创 2020-12-21 11:11:06 · 1182 阅读 · 0 评论 -
思想记录--QWT如何实现点选数据?
一、效果展示二、点选数据思想策略:重写QwtPlot类的鼠标点击事件,鼠标点击之后可以获得鼠标点击处坐标点P(x,y):QPointF P = this->canvas()->mapFromGlobal(QCursor::pos());但是点P是软件的物理坐标,需要将之转化为视窗上的画布坐标点Q(x,y):QPointF Q = QPointF(this->invTransform(QwtPlot::xBottom,P.x()),this->invTransform(原创 2020-12-21 11:16:17 · 1523 阅读 · 4 评论 -
思想记录--QWT如何绘制切线?
一、效果展示二、切线绘制思想2.1、原理策略:根据切点、切点的左相邻点和切点的右相邻点三个点,来求切线已知左相邻点n1(x1, y1),右相邻点n2(x2, y2),和切点m(x, y),根据n1和n2可求出y = k1 * x + b1;此时的n1n2线段平移到红线处就是切线,所以切线的斜率和n1n2线段的斜率相等,即k = k1;然后再代入切点的坐标,求出b,则可求出切线的解析式,然后根据解析式确定起点和终点即可绘制出切线;2.2、具体操作取出数据首先定位到一个数据点m然后原创 2020-12-21 16:42:39 · 428 阅读 · 0 评论 -
QWT--滚轮放大缩小和拖拽视窗
一、滚轮放大缩小QWT中提供了QwtPlotMagnifier类,用于实现鼠标滚轮放大和缩小图形的效果,其实本质就是修改x轴和y轴的范围。二、拖拽视窗QWT中提供了QwtPlotPanner类,用于实现鼠标拖动画布的效果,其实本质就是修改x轴和y轴的范围。附一各种功能有时候可能会发生冲突,例如框选放大功能和拖拽视窗功能都需要鼠标点击移动事件。如果两个功能同时开启的话,效果就会很糟糕,所以可以给每个功能加一个开关,由用户来自己调节://头文件QwtPlotZoomer *plot_zo原创 2020-12-24 16:59:12 · 2655 阅读 · 1 评论 -
QWT--坐标转换
QWT中在很多地方都需要用到坐标转换,自定义图元项(绘制在屏幕坐标系),曲线(显示在画布坐标系中)。例如:绘制切线,先需要根据画布坐标系计算出切线的两个点,然后将两个点坐标转换到屏幕坐标系坐标,这样绘制的线才会和曲线对应起来。方法一//将屏幕坐标转换为画布坐标double QwtPlot::invTransform( int axisId, int pos ) const;//将画布坐标转换为屏幕坐标double QwtPlot::transform( int axisId, double va原创 2020-12-28 15:59:40 · 1160 阅读 · 0 评论 -
QWT--曲线拟合
本文需参考:QWT–自定义图元项、QWT–点选数据一、效果展示二、思路分析通过鼠标点击拖动绘制矩形框,选择拟合数据,所以需要在QwtPlot类中实现下面三个函数:void mousePressEvent(QMouseEvent *); //鼠标点击事件函数void mouseMoveEvent(QMouseEvent *); //鼠标移动事件void mouseReleaseEvent(QMouseEvent *); //原创 2020-12-28 16:23:37 · 1406 阅读 · 0 评论 -
QWT--自定义坐标轴刻度值
一、效果展示定义xBottom为带单位的刻度值定义xBottom为分钟:秒数的刻度值二、具体步骤2.1、自定义坐标轴自定义坐标轴刻度,需要继承自QwtScaleDraw,然后重写如下虚函数:virtual QwtText label(double v) const;定义一个规则,然后设置坐标轴范围时,按定义的规则传入即可。例如,定义mm:ss刻度值:#ifndef TIMESCALEDRAW_H#define TIMESCALEDRAW_H#include <QWT/原创 2021-03-10 09:58:32 · 3843 阅读 · 1 评论 -
思想记录--QWT多曲线预览
一、QWT弊端QWT只有四个坐标轴,QwtPlot::xBottom、QwtPlot::xTop、QwtPlot::yLeft、QwtPlot::yRight,如果我想在画布上添加多条曲线(大于4条),并能看到每条曲线的读数,显然四个坐标系是远远不够用的(一个坐标系无法同时显示两条曲线的读数)。在一个坐标系上,无法同时很好的查阅曲线,因为有的曲线波动区间大,有的曲线波动区间小,例如:曲线1在0-100,曲线2在0-1,如果两条曲线在同一个坐标系中,注定无法同时看全两条曲线(屏幕就那么大),要看曲线1,曲原创 2021-03-17 11:39:20 · 1247 阅读 · 10 评论 -
QWT类汇总
一、QWT类汇总类名功能QwtAbstractLegend图例小部件的抽象基类QwtAbstractScale具有比例的小部件的抽象基类QwtAbstractScaleDraw绘制比例的抽象基类QwtAbstractSeriesStoreQwtSeriesStore和QwtPlotSeriesItem之间的桥梁QwtAbstractSlider具有刻度的滑块小部件的抽象基类QwtAlphaColorMapQwtAlphaColorMap 改变颜原创 2022-02-24 14:34:48 · 829 阅读 · 0 评论 -
QWT类之间的继承关系
版本:qwt-6.1.3原创 2022-02-24 14:55:57 · 240 阅读 · 0 评论 -
QWT官方例子--animation
文章目录一、运行效果二、工程结构三、代码分析四、附加知识点版本:qwt-6.1.3一、运行效果二、工程结构本工程结构很简单,定义了继承自QwtPlot的Plot类,定义了一个继承自QwtPlotCurve的虚基类Curve,并由虚基类Curve派生出了四个类,分别是:Curve1、Curve2、Curve3、Curve4三、代码分析main.cpp#include <qapplication.h>#include "plot.h"#ifndef QWT_NO_OP原创 2022-02-25 12:06:42 · 914 阅读 · 4 评论 -
QWT官方例子--barchart
文章目录一、运行效果二、工程结构三、代码分析一、运行效果二、工程结构main.cpp中是mainwindow的定义,不赘述;barchart是继承自QwtPlot的视窗类;多系列柱条形图是:QwtPlotMultiBarChart三、代码分析#ifndef _BAR_CHART_H_#include <qwt_plot.h>class QwtPlotMultiBarChart;class BarChart: public QwtPlot{ Q_OB原创 2022-03-24 16:59:49 · 1255 阅读 · 0 评论 -
QWT--数据游标
一、前言在开发数据-曲线功能时,如果把曲线和数据分立开来,观测起来不是很方便。只显示曲线,虽然能观测到变化趋势,但是无法读到精确的值;只显示数据,虽然可以读到精确的值,但是无法直观的看出曲线的变化趋势。示波器通常会采用示数线(一根垂直于界面的直线)来读数,移动到哪,就显示该点的值,这样就中和了曲线和数据二者的优势,让用户使用起来很便捷。其实之前就写过类似的功能,如下:但是当时刚刚接触QWT,也没有图形视图框架的基础,当时不知道怎么索引画布上的图元,所以采用的是按钮的形式来移动数据游标,可以结合速度调原创 2022-03-28 15:46:37 · 1607 阅读 · 0 评论 -
QWT--选取图元
一、前言在Qt的图形视图框架中,QGraphicsScent提供了items()来获取场景中的图元集合,提供了selectedItems()来获取场景中被选中的图元集合,获取集合之后,通过qgraphicsitem_cast<>()就可以将QGraphicsItem转换为相应的子类,例如:if (isItemSelected(LineElementItem::Type)) { LineElementItem* item = qgraphicsitem_cast<LineElement原创 2022-03-28 16:05:42 · 786 阅读 · 0 评论 -
QWT--添加Label
在使用QWT绘制曲线的时候,可能需要在画布上标明曲线的信息,例如我最近在做的静态录波,需要标明曲线的物理量,如下所示:在QWT–数据游标一文中,其实我已经通过自定义图元的方式实现过了。因为当时没有仔细看QWT源码,就只想到这个方式来实现自己的需求;但是自定义图元有个弊端(应该是我还没玩明白QWT),自定义的图元绘制是在物理坐标上,而不是画布坐标上,也就是说它始终印在我们的窗口的固定位置上,不会随着坐标轴范围的变化而变化。原创 2023-02-06 17:41:04 · 824 阅读 · 0 评论 -
QWT零碎记录
【代码】QWT零碎记录。原创 2023-02-09 17:55:59 · 167 阅读 · 0 评论 -
QWT导出图表
我们使用基于QWT开发的软件实现数据可视化后,可能需要将数据图表导出到本地,QWT提供了类来实现这一功能;原创 2023-02-15 15:26:53 · 431 阅读 · 1 评论