相信许多朋友在使用Qt做界面开发时,会涉及到将数据以图表的方式进行呈现。在网上有许多绘图控件,但适合Qt开发下的并不多,经过这几年的血泪教训,经验总结,直接进行开发的绘图控件有如下几个:
Qt是自带绘图控件的,在安装 Qt时记得勾选上QtChart的安装选项即可,那为何大部分做Qt开发的人员不会使用呢,这就要回到Qt开发的主要优势---跨平台开发,所以QT设计框架上不能只满足于一个平台,像Linux、Windows、macOS,以及国产操作系统,都是支持的,所以覆盖面广,开发人员可以将windows开发的项目移植到Linux上是非常便捷的,所以聊回正题,正是要适应太多平台,Qt在单独的功能应用上并不强,它只是一个框架,用过QTCP或QUDP一定被低效传输坑过(默认有传输间隔),那么QtChart也是同样的道理,在数据量1万以内还是能打的,但是现在做图表的,动不动就上万数据量,如果没有像素抽点,那么卡顿是不可避免的,,本人使用Qt5的版本,QtChart没什么优势,果断放弃了。
重点:QtChart做简单的图表还行,做复杂图表(金融图)很难实现。
Qwt是一款完全适应Qt5/6的图表控件,它的官网上是这么说:Qwt库包含GUI组件和实用程序类,主要用于有技术背景的程序。除了2D图的框架之外,它还提供了标尺、滑块、刻度盘、圆规、温度计、滚轮和旋钮来控制或显示double类型的值、数组或范围。
开源免费,非常友好,下载源码后编译生成qwt库,当时我使用的是qwt6.1.3,第一感觉界面好原始,并不美观,绘图效率上一般,大数据量依旧吃力,需要自己抽点显示。还有就是色谱图没法铺满,当界面缩放时,会明显看到渲染图层与背景分离,没法自动覆盖背景。
重点:qwt只是2维图表,支持图表样式非常多,开源友好【GNU宽松通用公共许可证(LGPL)】,但在开发设计上流程复杂,界面不够美观,大数据量使用不行,但比QtChart强(这个网上有许多同行都测试过)。
一个用于绘图和数据可视化的Qt C++小部件
除开上面的两个二维图表控件,接下来要介绍的这位是非常独特的存在,为何呢?非常轻量级,就一个头文件和一个cpp文件,完美替代QtChart,成为Qt绘图的首选,代码开源,可定义头文件编译成库。
界面上美观,支持数据量一般,当绘图数据上百万,并且不抽点,也能显示出来,就是卡顿,非常占内存(QCustomplot的绘图参数都使用QMap进行管理)。在开发上非常方便,引入头文件,实例化QCustomplot对象就完成图表的创建,网上有需要对该控件的大数据量改进,最直接的是修改数据指针,本人亲测,效果不行,因为图表不仅仅是数据,还有图层(多图层显示)和渲染处理,这些都是要结合传入的数据进行设置。
重点:优质的二维图表控件,开源但协议是GNU GPLv3,懂的同行都懂,不懂记得查查,开发上简单高效,处理大数据量卡顿,但优于Qwt。
前三个都是免费,接下来讲的是收费的,想白嫖的同行可以跳过。当本人看到收费时,本想看看一个绘图控件都要收费,太没奉献精神了,必须看看有什么特点:
网上下载了库和测试代码,才发现这个图表控件非常全面,二维全覆盖,支持复杂数据量,而且支持甘特图,以上三个控件都没有,而且支持三维点图和三维色谱图,最强大的地方时多语言都兼容,C++/C#/Java/Python等等,见下图:
看了开发示例,发现这个绘图控件很独特,就是一个网页的效果,但会自动像素抽点,自动调整纵坐标。所以想修改图表的横纵坐标范围会有点难,常常要结合画布的像素点来关联数据点。由于不能开源,所以很多功能没法再优化。
重点:收费控件,开发难度比较大,不是常规的图表设计逻辑,直接使用指针数据即可,不用单独存成绘图数据,大数据量表现优秀,就是大数据量下缩放卡顿,框选流程,覆盖所有二维图和三维图。
一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。
这个绘图控件非常美观,支持Qt开发,具体操作可以看这位博主的文章:
Qt+ECharts开发笔记(一):ECharts介绍、下载和Qt调用ECharts基础柱状图Demo_qt 封装echarts-CSDN博客
使用过Echarts,唯一比较不便的就是传入数据,需要学习js,如果数据量特别大,组绘图数据就会非常麻烦,目前没有一个好的方案。做一个简单图表还是可以的,大数据量表现优于QCustomplot和qwt。
重点:开源图表,二维图表和三维图表非常全,一个js文件,一个网页文件就组成一个图表,只是在Qt开发是需要用到QWebEnginView,这个部件需要安装qt时要选上才有。绘图组数据比较麻烦,不是很方便。
本人经验有限,如有描述不当的地方,望大家指正!最后祝大家调试一把过,编译没错误,运行不崩溃,越来越强大!