Qwt 7.0 新特性介绍 — 更现代、更强大的Qt数据可视化库

📅 2026/7/6 15:12:43
Qwt 7.0 新特性介绍 — 更现代、更强大的Qt数据可视化库
本文是 Qwt 7.0 系列介绍和教程如果你正在寻找一个高性能、协议友好、同时支持 2D 和 3D 绘图的 Qt 数据可视化库那么这篇文章就是为你准备的。系列总述文章Qwt 7.0 —— 基于 Qt 的高性能 2D/3D 绘图库概述 | 高性能曲线绘制 | 常用图表类型 | 高级科学图表 | 多坐标轴与布局 | 交互功能 | 3D 数据可视化 | 坐标轴与刻度 | 控件与辅助元素 | 总体架构解析 | matplotlib 风格绘图项目地址GitHub | Gitee | 在线文档Qwt 7.0 新特性介绍 — 更现代、更强大的Qt数据可视化库上篇文章《Qwt7.0-打造更美观高效的Qt开源绘图控件库》介绍了我将打造的 Qwt 7.0 这里展示一下当前的一些成果。得益于AI的快速发展Qwt7.0最近也进行了快速迭代后面很多想法都通过opencodeoh-my-opencodesuperpowersGLM5模型实现的这套组合下来完全满足日常的开发具体调校可以看我另外一个文章《AI 编程工具的经验及多智能体调校》Qwt7的仓库地址Githubhttps://github.com/czyt1988/QWTGiteehttps://gitee.com/czyt1988/QWT在这个项目的Github里有个很有意思的issue其实 Qt 还有以下两种绘图库可用:https://github.com/czyt1988/QWT/issues/2它提到了Qt可行的另外一个绘图库是ImGuiImPlot的结合能实现openGL的高性能渲染和2D3D的绘图我认真学习了一下ImGuiImPlot,觉得很有意思于是我蹭着在过年的时候又封装了一个库叫QIm把ImGuiImPlot嵌入到了Qt中实现像普通Qt窗口那样简单的使用ImGuiImPlotQIm的地址Githubhttps://github.com/czyt1988/QImGiteehttps://gitee.com/czyt1988/QIm效果我觉得这是下一代Qt最佳绘图可视化的库拥有非常高的性能和自由度。这个项目也是得益于AI能快速迭代开发基本上也是opencodeoh-my-opencodesuperpowersGLM5/GLM5.1模型实现的关于AI编程尤其在C/Qt下的AI Coding还有很多想讲的等有空再写一下这里主要介绍Qwt 7的一些新特性Qwt 7.0 是基于原版 Qwt 6.2.0 的现代化改进版本遵循 Qwt 的开源协议LGPL。这个版本带来了C11/17标准支持、CMake构建系统、单文件引入方式、更多的交互、3D绘图等功能可以让数据可视化开发更加便捷高效下面逐一介绍一下。2D/3D绘图一体化qwt同时支持2D/3DQwt 7.0 将原QwtPlot3D库整合进来实现了2D和3D绘图的一体化支持。现在一个库就能同时满足二维和三维数据可视化需求。3D绘图模块Qwt 7.0 内置完整的3D绘图能力支持✅多种绘图类型表面图、网格图、参数曲面、函数绘图等✅OpenGL渲染高性能三维渲染流畅的交互体验✅交互操作鼠标旋转、缩放、平移视角✅光照和材质真实感光照效果和材质配置✅颜色映射根据Z值自动映射颜色支持颜色条3D绘图效果核心类介绍类名说明Qwt3DPlot3D绘图基类提供基本框架和交互Qwt3DSurfacePlot3D表面图显示连续曲面Qwt3DGridPlot3D网格图显示离散网格数据Qwt3DFunction3D函数绘图根据数学函数生成曲面具体可点击此链接了解-Qwt-3D绘图简介: https://czyt1988.github.io/QWT/zh/use-guide/3d-plot/架构与构建升级C11/17 标准支持Qwt 7.0 全面拥抱现代 C 标准Qt5.12使用 C11 标准Qt6使用 C17 标准这意味着您可以使用现代 C 特性如auto、nullptr、override、final、lambda 表达式、智能指针等代码更加简洁和安全。CMake 构建系统告别传统的 qmakeQwt 7.0 采用现代化的 CMake 构建系统find_package(qwt REQUIRED) # 2D绘图 target_link_libraries(${PROJECT_NAME} PRIVATE qwt::plot) # 3D绘图 target_link_libraries(${PROJECT_NAME} PRIVATE qwt::plot3d)单文件引入方式Qwt 7.0 提供了一种极简的引入方式 —— 将整个库合并为单文件src-amalgamate/QwtPlot.h— 合并后的单一头文件src-amalgamate/QwtPlot.cpp— 合并后的单一源文件只需将这两个文件加入您的项目无需复杂的构建配置特别适合小型项目或快速原型开发。QwtFigure — 多绘图布局容器QwtFigure是 Qwt 7.0 最重要的新增功能之一提供类似matplotlib Figure的多绘图布局能力。功能概述QwtFigure是一个用于组织和管理多个QwtPlot绘图组件的容器窗口提供归一化坐标布局使用[0,1]范围内的坐标系统进行相对位置控制网格布局行列式的网格排列参考matplotlib的subplot方式寄生绘图支持在同一个绘图区域内创建多个独立坐标轴图形导出功能支持图片输出坐标轴对齐功能当多个子绘图的刻度范围不同时刻度线可能不对齐影响视觉效果。QwtFigure 提供了坐标轴对齐功能通过QwtFigure::addAxisAlignment函数可以指定子绘图的坐标轴进行对齐对齐后的效果交互式操作蒙版QwtFigureWidgetOverlay提供了在QwtFigure上进行交互式操作的功能支持鼠标拖拽调整子绘图的位置和大小支持选择当前激活的绘图组件提供清晰的可视化反馈边框、控制点、尺寸信息具体可点击此链接了解-Qwt-figure窗口容器: https://czyt1988.github.io/QWT/zh/use-guide/figure-widget/寄生绘图 — 多坐标轴系统寄生绘图Parasite Axes允许在同一绘图区域内创建任意多个独立坐标轴完美解决多Y轴、多X轴的复杂绘图需求。工作原理寄生绘图与宿主绘图共享绘图区域透明背景但拥有独立的坐标系统。当宿主绘图被销毁时寄生绘图也会自动销毁生命周期自动管理。详细使用方法请参考-Qwt-多坐标轴的创建: https://czyt1988.github.io/QWT/zh/use-guide/parasite-axes/交互功能重构Qwt 7.0 对绘图交互进行了全面重构提供更友好的体验实时平移 — QwtPlotPanner原版 Qwt 的QwtPanner使用位图缓存进行平移平移过程中无法看到数据的实时变化。Qwt 7.0 重构了QwtPlotPanner原版的QwtPlotPanner改名为QwtPlotCachePanner详细使用方法及效果请参考-Qwt-平移工具: https://czyt1988.github.io/QWT/zh/use-guide/panner/特性线性坐标轴、对数坐标轴、日期时间坐标轴全支持多坐标轴实时同步移动平移过程中绘图实时刷新整体画布缩放 — QwtPlotCanvasZoomer原版QwtPlotZoomer只能绑定两个坐标轴无法处理四轴或有多个坐标轴同时缩放的场景。Qwt 7.0 新增QwtPlotCanvasZoomer无需指定坐标轴自动处理整个画布的缩放具体可参见-Qwt-缩放工具: https://czyt1988.github.io/QWT/zh/use-guide/zoomer/类名变更说明为保持命名清晰部分类名进行了调整原名称新名称说明QwtPlotZoomerQwtPlotAxisZoomer只能绑定2个坐标轴更名为轴缩放器-QwtPlotCanvasZoomer新增整体画布缩放器QwtPannerQwtCachePanner带缓存的平移器QwtPlotPannerQwtPlotCachePanner带缓存的绘图平移器-QwtPlotPanner新增实时平移器坐标轴内置交互动作坐标轴交互动作允许用户通过鼠标直接操作坐标轴体验类似QCustomPlot和ImPlot的交互方式。功能演示坐标轴拖动操作左键单击选中坐标轴拖动移动坐标轴范围点击坐标轴外位置取消选中坐标轴滚轮缩放左键选中坐标轴滚轮缩放缩放中心为鼠标位置详细使用方法及效果请参考-Qwt-坐标轴交互动作: https://czyt1988.github.io/QWT/zh/use-guide/scale-builtin-action/数据拾取功能新增QwtPlotSeriesDataPicker提供了数据拾取功能鼠标移动时实时显示数据点信息提供两种拾取模式Y值拾取模式显示当前 X 位置对应所有曲线的 Y 值支持线性插值计算。最近点拾取模式计算距离鼠标最接近的点进行拾取适合峰值数据拾取场景。详细使用方法及效果请参考-Qwt-数据拾取工具: https://czyt1988.github.io/QWT/zh/use-guide/pick-value/针对大数据集Qwt 7 提供了窗口搜索算法默认启用阈值1000 个数据点搜索窗口默认为曲线点数的 5%避免全曲线遍历大幅提升性能新增图表类型箱线图 — QwtPlotBoxChartQwtPlotBoxChart提供完整的箱线图Box-and-Whisker Plot支持直观展示数据统计分布特征。支持预计算数据和原始数据自动计算两种方式多种须须计算方法Tukey(1.5×IQR)、百分位数、最小最大值、标准差、标准误三种箱体样式矩形、菱形、缺口形垂直和水平方向切换异常值自动检测、自定义符号和抖动显示详细使用方法请参考-箱线图使用指南https://czyt1988.github.io/QWT/zh/use-guide/boxchart/其他实用功能刻度朝内显示v7.2.1 新特性支持将坐标轴刻度线显示在绘图区域内部适合紧凑布局场景。详细使用方法请参考-刻度朝内显示https://czyt1988.github.io/QWT/zh/use-guide/ticks-inside/示例代码位于examples/2D/ticks_insideNaN/Inf 异常值处理Qwt 7.0 对数据中的异常值NaN、Inf进行了完善处理QwtPointMapper添加异常值处理数据异常不会导致坐标映射错误数据范围判断增加异常值过滤绘图更加稳定不会因异常数据崩溃QwtGridRasterData 网格插值新增QwtGridRasterData类相比QwtMatrixRasterData支持二维数据表输入支持 X/Y 轴网格插值更灵活的光谱图数据处理主要用于热力图迁移指南Qt5.12 完全兼容Qt6 完全支持大部分 Qwt 6.x 代码可直接使用仅需少量类名替换总结Qwt 7.0 是一次全面的现代化升级类别新特性架构升级C11/17、CMake构建、单文件引入2D/3D一体化QwtPlot3D融合、统一库支持2D和3D绘图布局功能QwtFigure多绘图容器、寄生绘图多坐标轴交互改进实时平移、整体画布缩放、坐标轴内置交互数据拾取Y值拾取、最近点拾取、智能插值图表类型箱线图、刻度朝内显示、3D表面图/网格图稳定性NaN/Inf处理、异常值过滤这些新特性让 Qwt 成为一个更现代、更强大、更易用的 Qt 数据可视化库一个库同时支持2D和3D绘图适合科学计算、工程应用、数据分析等多种场景。Githubhttps://github.com/czyt1988/QWTGiteehttps://gitee.com/czyt1988/QWT另外大家也可以观摩我新开的QIm库Githubhttps://github.com/czyt1988/QImGiteehttps://gitee.com/czyt1988/QImttps://github.com/czyt1988/QWT](https://github.com/czyt1988/QWT)Giteehttps://gitee.com/czyt1988/QWT另外大家也可以观摩我新开的QIm库Githubhttps://github.com/czyt1988/QImGiteehttps://gitee.com/czyt1988/QIm在AI的辅助下目前两个库我都会同步更新系列教程第 1 篇快速入门与核心新特性概览第 2 篇曲线绘图详解 —— 从基础到百万级数据性能优化第 3 篇常用图表类型实战 —— 柱状图、散点图、箱线图与直方图第 4 篇高级科学图表 —— 光谱图、向量场、K线图与极坐标绘图第 5 篇多坐标轴与多绘图布局 —— 寄生绘图与 QwtFigure 容器第 6 篇交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取第 7 篇3D 数据可视化 —— OpenGL 高性能三维绘图第 8 篇坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内第 9 篇控件与辅助元素 —— 滑块旋钮、标记与装饰第 10 篇总体架构解析 —— 从单体到三库模块化的演进第 11 篇matplotlib 风格绘图 —— QwtPyPlot 接口详解