Qwt源码解读之QwtPlotItem类(二)

《Qt开发》基于QWT的曲线图绘制 Qwt绘制曲线图 该示例包含以下功能: 1.使用qwt绘制曲线图 2.通过鼠标实现绘图的缩放,只缩放x轴或只缩放y轴或同时缩放 3.设置绘图区域和绘图区域外的背景颜色 4.通过点击图例实现曲线的显示和隐藏 QwtPlot绘图部件 头文件 #include <qwt_plot.h> 枚举类型 enum Axis {yLeft, yRight, xBottom, xTop,axisCnt} 阅读详情

      Qwt框架提供了几种标准的图元实现。如网格(QwtPlotGrid类)、标签(QwtPlotMarker类)、标尺(QwtPlotScaleItem类)、显示SVG格式图形文件的图元(QwtPlotSvgItem类)、频谱图(QwtPlotSpectrogram类)、曲线(QwtPlotCurve类)、柱状图(QwtPlotHistogram类)、间隔区域(QwtPlotIntervalCurve类)、三维散点图(QwtPlotSpectroCurve类)等。用户可以继承QwtPlotItem实现符合自己需要的图元。

1、QwtPlotCurve类:曲线类图元。这个类是使用最多的一个类,它表征一系列点数据。QwtPlotCurve继承自QwtPlotSeriesItem<T>类模板,其中T为QPointF。

1)属性:

class QwtPlotCurve::PrivateData
{
public:
    PrivateData():
        style( QwtPlotCurve::Lines ),
        baseline( 0.0 ),
        symbol( NULL ),
        attributes( 0 ),
        paintAttributes( QwtPlotCurve::ClipPolygons ),
        legendAttributes( 0 )
    {
        pen = QPen( Qt::black );
        curveFitter = new QwtSplineCurveFitter;
    }

    ~PrivateData()
    {
        delete symbol;
        delete curveFitter;
    }

    QwtPlotCurve::CurveStyle style; // 曲线风格:
    double baseline; // 基线,填充时的基准

    const QwtSymbol *symbol; // 节点符号
    QwtCurveFitter *curveFitter; // 曲线拟合

    QPen pen;
    QBrush brush; // 填充刷子

    QwtPlotCurve::CurveAttributes attributes;
    QwtPlotCurve::PaintAttributes paintAttributes;

    QwtPlotCurve::LegendAttributes legendAttributes;
};
通过设置曲线的属性值,可以得到各种各样的曲线样子和表现方式。


2)数据设置接口:

void setSamples( const QVector<QPointF> & );
几乎每个QwtPlotItem子类(Representator)都有这样一个接口函数,用来设置数据。但由于不同的QwtPlotItem子类需要不同的数据,所以没有把这个函数定义为虚函数。
3)寻找最近点:

 int closestPoint( const QPoint &pos, double *dist = NULL ) const;
这是一个定义良好的接口示例。返回值int表示最近点在曲线数据中的索引;dist 为最近点到给定点pos的距离。

4)设置节点符号表现形式(指针传递):

    void setSymbol( const QwtSymbol *s );
    const QwtSymbol *symbol() const;
其实现如下:
/*!
  Assign a symbol

  \param symbol Symbol
  \sa symbol()
*/
void QwtPlotCurve::setSymbol( const QwtSymbol *symbol )
{
    if ( symbol != d_data->symbol ) //  先判断是否是同一个对象赋值
    {
        delete d_data->symbol; // 删除旧的节点符号对象
        d_data->symbol = symbol; // 赋值
        itemChanged(); // 更新legend并刷新plot
    }
}

/*!
  \return Current symbol or NULL, when no symbol has been assigned
  \sa setSymbol()
*/
const QwtSymbol *QwtPlotCurve::symbol() const
{
    return d_data->symbol;
}

2、QwtPlotIntervalCurve类:绘制两条曲线之间的间隔区域,常用来显示错误杆或区域。继承自QwtPlotSeriesItem<T>类模板,其中T为QwtIntervalSample。[y1,y2] = f(x)


3、QwtPlotHistogram类:柱状统计图。继承自QwtPlotSeriesItem<T>类模板,其中T为QwtIntervalSample。要注意QwtPlotHistogram与QwtPlotIntervalCurve的区别。

理解QwtIntervalSample的定义: A sample of the types (x1-x2, y) or (x, y1-y2) 。

4、QwtPlotSpectroCurve类: 三维散点图,用颜色表示Z轴。继承自QwtPlotSeriesItem<T>类模板,其中T为QwtPoint3D。

5、QwtPlotGrid类:绘制坐标网格。

该类提供了丰富的属性设置接口,通过设置不同的属性值,可以得到非常漂亮的网格底图。

6、QwtPlotMarker类:绘制标签。有横线,竖线,十字架三种线风格。

    void setXValue( double );
    void setYValue( double );
    void setValue( double, double );
    void setValue( const QPointF & );

    double xValue;
    double yValue;

表示什么意思(属性)?

标签与线的对齐方式:

    void setLabelAlignment( Qt::Alignment );
    Qt::Alignment labelAlignment() const;
标签的绘制(布局)方向:

    void setLabelOrientation( Qt::Orientation );
    Qt::Orientation labelOrientation() const;

7、QwtPlotScaleItem类:用于在画布内绘制标尺的类。

A class which draws a scale inside the plot canvas.

QwtPlotScaleItem can be used to draw an axis inside the plot canvas. It might by synchronized to one of the axis of the plot, but can also display its own ticks and labels.

It is allowed to synchronize the scale item with a disabled axis. In plots with vertical and horizontal scale items, it might be necessary to remove ticks at the intersections, by overloading updateScaleDiv().

The scale might be at a specific position (f.e 0.0) or it might be aligned to a canvas border.

通过 

    void setXAxis( int axis ); //horizontal  水平方向
    void setYAxis( int axis ); // vertical  竖直方向

的设置可以指定QwtPlotScaleItem绑定哪一个坐标轴。

通过

void setScaleDiv( const QwtScaleDiv& );

的设置可以让QwtPlotScaleItem显示自己独立的刻度尺。

8、QwtPlotSvgItem类:显示SVG格式图片数据的图元。

在例子svgmap里面演示了 QwtPlotSvgItem类的使用。用于导入一个SVG格式的图片。

9、QwtPlotRasterItem类:显示栅格数据。

A class, which displays raster data.

Raster data is a grid of pixel values, that can be represented as a QImage. It is used for many types of information like spectrograms, cartograms, geographical maps ...

Often a plot has several types of raster data organized in layers. ( f.e a geographical map, with weather statistics ). Using setAlpha() raster items can be stacked easily.

QwtPlotRasterItem is only implemented for images of the following formats: QImage::Format_Indexed8, QImage::Format_ARGB32.

QwtPlotRasterItem是一个抽象类,定义了一个将数据渲染成QImage的纯虚函数。

    /*!
      \brief Render an image 

      An implementation of render() might iterate over all
      pixels of imageRect. Each pixel has to be translated into 
      the corresponding position in scale coordinates using the maps.
      This position can be used to look up a value in a implementation
      specific way and to map it into a color.

      \param xMap X-Scale Map
      \param yMap Y-Scale Map
      \param area Requested area for the image in scale coordinates
      \param imageSize Requested size of the image
     */
    virtual QImage renderImage( const QwtScaleMap &xMap,
        const QwtScaleMap &yMap, const QRectF &area,
        const QSize &imageSize ) const = 0;
10、QwtPlotSpectrogram类: 频谱图图元,继承自QwtPlotRasterItem类。






Qwt QwtPlot类详解 QwtPlot类是Qwt库中最重要的类之一,它提供了一个容器来组织和绘制多个曲线、散点图、条形图、图像等。提供一个绘图窗口,可以在其中绘制简单或复杂的二维数据图。支持多种类型的图表,包括曲线图、柱状图、散点图等。能够自定义图表的外观,包括线条颜色、填充颜色、图例等。支持坐标轴的自定义,包括坐标轴标签、刻度间隔、刻度线风格等。提供交互式功能,如放大、缩小、拖动等。支持多个图层,可以在同一个绘图窗口中叠加绘制不同的图表。支持导出图表为图片文件。 阅读详情

相关推荐

Qwt库画Spectrogram声谱图

Qwt是一个用于数据可视化的开源软件库,它提供了丰富的图表绘制功能,使得开发者可以轻松地创建各种类型的图表,如曲线图、散点图、柱状图等。Spectrogram频谱图;Qwt库功能

热土程序园,利他愉己~ 1400

qwtplot 画频谱代码

QwtPlotSpectrogram* m_spectrogram; QwtMatrixRasterData* m_rawdata; QwtScaleWidget* m_rightAxis; LinearColorMapRGB* m_colorMap; class LinearColorMapRGB : public QwtLinearColorMap { public: Li...

foxgod的专栏 1902

qwt-spectrogram.rar

二维Qwt库中spectrogram(频谱图)这个例子被我改为读取气象数据了,附带气象数据txt文件。需自己编译并更改读取路径

QwtPlotItem解读---from Qwt-6.1.1

QwtPlotItem解读———from Qwt6.1.1 QwtPlotItem是画布上所有图元的基类,因为QwtPlotItem是一个抽象基类,所以所有的图元实例化时 都必须实现draw()方法。 公有类型: • enum RttiValues { Rtti_PlotItem = 0, Rtti_PlotGrid, Rt

yangchuankai's blog 2855

qwt已编译,亲测,包括例子和库文件

官网下载的QWT6.1.2(最新版本),已经编译!包括examples

PlotSpectrogram:该程序绘制频谱图(强度与频率,与时间绘制)。-matlab开发

该程序绘制频谱图(强度与频率的垂直切片,切片与时间绘制)。 PlotSpectrogram 旨在易于使用。 特征: • 强度以对数为单位,动态范围受到限制(默认为 80 dB)。 这种策略避免了频谱图的低电平部分扩展动态范围从而模糊了能量部分的细节的问题。 • 强度计算为绝对单位 dBov(相对于过载的分贝)。 • 可以控制频谱图的时频分辨率。 频谱图的带宽分辨率可以直接指定。 默认是窄带频谱图。 可选地,可以根据系数、带宽或长度来指定分析窗口。 • 在分析长窗口(对应于小带宽)时,频率变换适当地考虑了时间混叠。 • 可以指定频谱图切片的数量(默认为 500)。 • 可以指定频率点的数量(默认值是自动选择 513 或 1025 个值,具体取决于窗口长度)。 • 可以应用可选的预加重以更好地显示高频强度。 • 所有窗口都以各自的时间点为中心。 这意味着时间间隔端点处的窗口将包括端点两侧的样本

Qwt源码解读之QwtPlotItem类(一)

QwtPlotItem类是画布上所有图元的基类。QwtPlotItem是一个抽象基类,所有的实例图元必须实现YourPlotItem::draw()方法(纯虚函数)。具体的看看Qwt文档: Base class for items on the plot canvas. A plot item is "something", that can be painted on the plot ca

e5Max的专栏 7188

智能优化电池:基于单片机的电池管理系统

设计简介: 本设计是基于单片机的电池管理系统,主要实现以下功能: 可通过LCD1602显示温度、电压电流值; 可通过按键调整温度、电压和电流的阈值; 用ADC0832将模拟量转换为数字量。 标签:51单片机、LCD1602、ADC0832 效果图: 总体资料: 原理图: 软件设计流程: 系统框图: 本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成电动汽车的电池管理的整个系统,...

专注单片机实战教学,分享单片机学习资料 375

Qwt源码解读之开篇记

最近突然有一种想研究Qwt源码的想法,一来通过解读源码深入学习Qwt库,掌握如何扩展一个库;二来通过对开源库源码的研究,向大师学习一些编程习惯和设计技巧。        Qwt全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目,可用来绘制各种统计图。目前版本为Qwt-6.0.1。http://qwt.sourceforge.ne

e5Max的专栏 4577

LatentSync:开源数字人唇形同步技术的实战部署与优化指南

本文详细介绍了开源数字人唇形同步工具LatentSync的实战部署与优化全流程。从核心原理(潜在扩散模型与TREPA技术)解析,到手把手完成环境搭建、模型获取及首次推理。文章深入探讨了自定义素材处理、关键参数调优(如guidance_scale),并提供了显存不足、人脸检测失败等常见问题的解决方案与性能优化技巧,旨在帮助用户高效部署并提升生成效果。

9o8p7i6u5y的博客 1007

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling

今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,内容为 hdaudioC0D2: unable to configure disabling ,这里是记录了报错的解决全过程

qq_48717745的博客 990

Qwt使用总结,初步整理

最近研究了一些Qwt,至此总结Qwt的认识以便以后的备忘从什么方面开始说起呢? 从这个类是什么?可以用来做什么? 关于Qwt的简介就不说了。主要说说其中用到的几个类吧 QwtPlot 是一个2D画图控件(Widget)。继承于QFram和QwtPlotDict。严格的说来,它只是一个视图窗口,真正的绘制设备是它的中心部件QwtPlotCanvas类。在它的画布上可以显示无限定数量的图表项(Pl

何亮5083的博客 8973

【企业微信自建应用-前端篇】企业微信自建应用开发流程详细介绍

最近接到需求,需要我在企业微信端自建一个应用,用来接受PC端派发的工单,告警,公告等内容。这里写一个帖子汇总一下我经历的全流程开发,当然这是基础的流程啊。因为功能要求也不高。后面如果开发更多的东西再补充。

weixin_44265726的博客 9400

Qwt源码解读之QwtPlot类

QwtPlot类是一个二维绘图部件,继承自QFrame 和 QwtPlotDict。不过严格的说来,它只是一个视图窗口,真正的绘制设备是它的中心部件QwtPlotCanvas类。在QwtPlot的画布上可以显示不限数量的图元项(plot items)。这些图元项可以是曲线(QwtPlotCurve),标签(QwtPlotMarker),网格(QwtPlotGrid),或者其它任意的从QwtPlot

e5Max的专栏 1万+

做小程序支付时,我是怎么被“虚拟支付”绊了一跤的

微信小程序支付开发中,普通支付与虚拟支付存在本质差异。开发者常误将虚拟权益(会员、点数等)当作普通商品支付,导致审核失败。两者在审核关注点、结算方式、API调用及平台政策上都截然不同。关键点在于:1)先明确交易对象类型;2)产品命名需真实反映权益性质;3)支付成功≠业务完成;4)审核说明要详细描述交付逻辑;5)避免依赖过时规则。正确顺序应是:判断商品属性→选择支付类型→设计订单系统→准备审核材料。这个认知差异比技术实现更重要,提前理解平台规则可大幅减少返工。

zhurizhe71的学习之路 2581

# YOLOv11-seg改进系列 | 引入CVPR MetaFormer的C3k2_PoolingFormerCGLU模块,池化Token混合+CGLU门控MLP

本文引入 CVPR 2022 论文(MetaFormer/PoolFormer)提出的 MetaFormer 元架构设计,以Pooling Token 混合器 + ConvolutionalGLU(CGLU)MLP构成,将其封装为,用于替换 YOLOv11-seg 的 C3k2 块。对比维度C3k2(基线)C3k2_PoolingFormerCGLU(本文)参数量(n scale)2.46M≈2.49M9.6≈9.69.7(+1.0%)架构范式单阶段卷积MetaFormer 双阶段。

qq_44224801的博客 845

QWT-前言

最近突然有一种想研究Qwt源码的想法,一来通过解读源码深入学习Qwt库,掌握如何扩展一个库;二来通过对开源库源码的研究,向大师学习一些编程习惯和设计技巧。        Qwt全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目,可用来绘制各种统计图。目前版本为Qwt-6.0.1。http://qwt.sourceforge.

转基因蚊子的博客 603

【深度学习新浪潮】算力行业的核心技术有哪些?

算力行业核心技术是芯片+互联+存储+调度+能效+软件的全栈协同:芯片提供算力、互联打通集群、存储保障数据、调度提升效率、能效支撑规模、软件释放算力。当前AI大模型推动算力从“单机”走向“万卡级超节点集群”,技术竞争从单一芯片升级为系统级、全栈化的综合能力。

专注:太空算力、AI infra、异构调度、大模型成本工程 338

给QwtPlot和QwtPolarCurve创建图例,多条曲线显示部分图例

创建图例QwtLegend 借助QwtLegendLabel实现 b:当大于一条曲线,显示所需的图例。a:当只有一条曲线时,不显示图例。

qq_52218412的博客 1059

ROCm rocr-libhsakmt分析系列1-2:多GPU跨卡VRAM访问机制分析

本文基于ROCr-Runtime的libhsakmt库源码,深入分析了多GPU系统中跨设备内存访问的实现机制。主要内容包括: 实现流程概述:通过P2P拓扑发现、统一虚拟地址空间、页表映射和硬件转发四个步骤,实现零拷贝的跨GPU内存访问。

图形/计算GPU的驱动与虚拟化技术分享园地 2505

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

qwtPlot自定义控件

classpublicpublic();myplot();voidQStringvoidQPenvoidfloatxfloatyQPenpen;floatxy;QStringtext;virtualvoiddrawQPainterpainterconstxMapconstyMapconstQRectFcanvasRectconst;virtualintrtti()const。

lighthouse_s的博客 489

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Qwt源码解读之标尺相关类

Qwt中添加标尺是非常方便和漂亮的。除了有普通的直尺外,还有环形标尺。这里我们先学习一下直尺的相关类。直尺的相关类共有下面几个: 1、QwtScaleMap:标尺值映射类。       QwtScaleMap类用于提供标尺坐标系与绘制设备坐标系之间的映射关系。其主要的功能依托 QwtScaleTransformation 类来实现。 2、QwtScaleDiv:标尺刻度划分类。

e5Max的专栏 9331

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

QT网格线的颜色设置

QColor color=curAxis->gridLineColor(); color=QColorDialog::getColor(color); if (color.isValid()) curAxis->setGridLineColor(color);

weixin_44317873的博客 2137

QT学习之旅 - QWT笔记

QT QWT其中一个学习笔记

yasinawolaopo的博客 316
上一篇: Qwt源码解读之QwtPlotItem类(一)
下一篇: Qwt源码解读之缩放操作类
e5Max
博客等级 码龄14年 145粉丝 129原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值