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

zemax光线光扇图

通过入瞳某一坐标(PX,PY)的光线在像面上有唯一的位置(EX,EY),以EX,EY为纵坐标,以PX,PY为横坐标,分别建立坐标系,把通过入瞳的光线都在坐标系里描点就得到了光扇图。对于视场内任意一点,取其子午面内的光线,以光线在光阑面上的透射点坐标为横坐标,同时以该光线在像面上的坐标为纵坐标,描出所有点,构成的图形即为子午面光扇图。在焦点位置,曲线的斜率为0,也就是说,不管入射时的横坐标(光阑面上的位置)是多少,离轴多远,都将汇聚在焦点处。此时,子午面和弧矢面有不同的分布,两条曲线不重合。

fendoudecheng的博客 8096

Qwt源码解读之开篇记

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

e5Max的专栏 4577

Polyworks脚本开发学习笔记(一)-脚本开发环境

详细的总结和记录了利用Polyworks进行脚本开发的一些方法和心得

qq_43662503的博客 6800

TI AWR2944毫米波雷达开发板开箱:用官方Demo快速上手3D点云与热图生成

本文详细介绍了TI AWR2944毫米波雷达开发板的开箱与实战应用,包括硬件准备、软件开发环境搭建、Demo固件刷写与配置、实时可视化与数据解析等全流程指南。通过官方Demo快速上手3D点云与热图生成,帮助开发者高效掌握毫米波雷达技术在工业检测、智能交通等领域的应用。

weixin_42627853的博客 308

Qwt使用总结,初步整理

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

何亮5083的博客 8973

从零玩转Vitis裸机开发:手把手教你创建、移植与实战优化

✅ Vitis裸机开发全流程✅ 中断系统配置技巧✅ 跨平台移植方法论✅ 性能优化实战经验研究FreeRTOS移植探索AMP(非对称多处理)架构学习使用Vitis Analyzer进行性能分析技术雷达:关注Xilinx最新推出的Vitis Unified IDE,其集成了更强大的调试和分析工具。立即动手实践吧!

QQ_778132974的博客 584

Qwt源码解读之QwtPlot类

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

e5Max的专栏 1万+

[NoC]Outstanding和Credit的概念详解

摘要:本文详细解析了计算机体系结构中outstanding和credit两个核心概念。outstanding指已发出但未完成的请求数量,通过跟踪未决事务实现并发和乱序执行,常见于AXI总线等场景;credit则是基于信用令牌的流控机制,通过控制发送速率防止接收端缓冲溢出,多用于NoC网络。二者在目的、机制上存在差异:outstanding侧重提升并发度,credit关注流控保护。文章通过AXI协议实例和SystemC代码示例展示了二者的应用与结合方式,并探讨了在SoC设计中参数优化的方法,包括性能/资源权衡

元直的博客 2282

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

本文讲述英飞凌TC3xx的通用计时器GTM的架构。

无所适从的我的博客 4596

QWT-前言

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

转基因蚊子的博客 603

innovus:ccopt_design分段长tree操作

这步don't touch保证后面完整cts尽量不会动到已经长过的tree。需要给sub tree手写一个spec,参考create_ccopt_clock_tree_spec -file的写法,只写create_ccopt_clock_tree和skew group部分就行。

m0_61544122的博客 1677

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

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

qq_52218412的博客 1059

基于粒子群优化的PID控制在药液流量控制系统中的应用

本文提出了一种基于粒子群优化(PSO)的PID控制算法,用于药液流量控制系统。系统采用C37控制器和Codesys 2.3编程环境实现,通过传感器实时监测流量、压力和车速,并控制水泵占空比和电动球阀开度来精确调节药液流量。硬件配置包括FT-2000流量传感器、PT-3000压力传感器和MV-500电动球阀等。控制算法将PSO与PID结合,使用ITAE指标优化PID参数,在Codesys中实现了包含PSO优化循环、PID控制等功能的程序模块。该系统通过分层控制策略和智能优化算法,提高了药液流量控制的精度和响应

AI的内部世界的博客 250

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

qwtPlot自定义控件

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

lighthouse_s的博客 489

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Qwt源码解读之标尺相关类

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

e5Max的专栏 9331

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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、付费专栏及课程。

余额充值