Qt 与Qwt相比,QCustomPlot有哪些优点/缺点?

Qt 与Qwt相比,QCustomPlot有哪些优点/缺点?,qt,plot,qwt,qcustomplot,Qt,Plot,Qwt,Qcustomplot,我现在使用Qwt已经两年了。我喜欢它的面向对象类,这使得它很容易适应绘图和功能。 如今,QCustomPlot正变得越来越受欢迎,并与Qwt展开竞争。 当然,我确实比较了API。然而,我对两个图书馆的经验丰富的用户的证词感兴趣。什么方便?什么不可以?有什么陷阱吗?我不会说自己“有经验”,因为我只使用了几个月的Qwt,而使用了几个星期的QCustomPlot。尽管如此,我的印象是: 目前,QCustomPlot的开发似乎更为积极。最后一次发布是在2012年8月(而Qwt的最后一次发布要追溯到20

我现在使用Qwt已经两年了。我喜欢它的面向对象类,这使得它很容易适应绘图和功能。 如今,QCustomPlot正变得越来越受欢迎,并与Qwt展开竞争。 当然,我确实比较了API。然而,我对两个图书馆的经验丰富的用户的证词感兴趣。什么方便?什么不可以?有什么陷阱吗?

我不会说自己“有经验”,因为我只使用了几个月的Qwt,而使用了几个星期的QCustomPlot。尽管如此,我的印象是:

  • 目前,QCustomPlot的开发似乎更为积极。最后一次发布是在2012年8月(而Qwt的最后一次发布要追溯到2011年)。主观上,它的界面似乎更符合Qt框架
  • 另一方面,Qwt似乎更成熟、更有特色。例如,当前版本的QCustomPlot无法直接设置轴矩形的颜色背景(仅支持将背景设置为用户提供的pixmap)。另一个例子-Qwt具有特殊的类和方法,以便于绘制和放大具有大量点的曲线。我在QCustomPlot里找不到这样的东西
编辑:《QCustomPlot》的作者缺少设置绘图背景的功能,并承诺在即将发布的版本中添加该功能

QCustomPlot和Qwt之间还有另一个重要的区别——许可。 -Qwt是LGPL,所以您可以将其链接到非GPL项目中。QCustomPlot是GPLV.3,很多人(包括我自己)都觉得它太严格了。如果您想要LGPL许可证,QCustomPlot作者邀请您联系他


EDIT2(2013年3月25日):Qwt分支5.*和6.*的最新版本于11月发布,这取消了QCustomplot“更积极开发”的优势,我无法比较这两个库,因为我只使用QCustomplot(现在一年),但我相信我的评论可能对其他库有用

QCustomPlot的优点

  • 在Gitorious上公开提供
  • 愿意提供帮助的现有用户群(包括autor本人)
  • 对LGPL许可的开放性(以我为例,作为捐赠的交换)
  • 界面非常干净简洁
  • 如果存在bug,很容易找到(我的bug修复很少超过一行)
  • 易于扩展
  • 非常容易从笛卡尔绘图库中破解任何你想破解的东西
  • 良好的文件
  • 以1.h和1.cpp文件的压缩形式提供-方便快速集成或专门构建的一个widgeters
  • 非常好的性能(在我所有的用例中)
  • 很明显,作者喜欢漂亮的代码,并且可以生成一个
  • 经过深思熟虑的路线图(未来很长一段时间)
QCustomPlot的缺点

  • 非常严格的笛卡尔(即:无饼图)
  • 在我的例子中,我花了一些时间来掌握所有重要的东西(如果一个人喜欢实现与基础质量相当的扩展)
  • 也许进化有点慢(就像许多其他的一个忙碌的人计划的那样)
  • 仅在主线程中可用(例如,当您需要在多线程Web服务器中生成图片时,您需要在主线程中运行此库,无论这对您的实现意味着什么)

如果需要LGPL ish许可证,则可能没有免费选项(取决于作者的考虑)。考虑到图书馆的质量和可用性,我的公司为换取LGPL许可协议而提供的捐赠并不过分。

在绘制大量点时。 用户将焦点集中到整个绘图上。ie(x、y轴被像素完全覆盖)

(点数=以下计算)

拖动绘图时:

  • Qwt的性能比QCustomPlot好得多
  • QCustomPlot拖拽/重放的滞后时间远远超过Qwt,这对UI不利
  • Qwt滞后可忽略且可接受
  • Qwt需要较少的处理
我注意到的是: 拖动时,Qwt仅拖动绘图区域,并在拖放后在该区域上绘制。 而QCustomPlot在放弃之前尝试重新启动。 (请注意,当然可以,但这可以帮助QCustomPlot的员工做得更好。)


此外,Qwt还提供可在外部管理的原始缓冲区选项。 我能够将(QcustomPlot)150Mb减少到40Mb以下。 保持

QCustomPlot强制用户将内存分配到X轴(errorbar+,errorbar-),y轴(errorbar+,errorbar-) (2*2*sizeof(double))在3*2*sizeof(double)中浪费内存 ie 48字节中的32字节是浪费(对于1个样本),其中,对于一个样本(对于x和y),仅Qwt需要16字节

afai了解,错误栏也可以在Qwt中实现

  • 相等点数(96k采样数/秒*10秒缓冲=96*1000*10=~1M)
  • QCustomPlot中禁用抗锯齿,Qwt中启用抗锯齿
  • 同样的重绘算法。(以相同的时间间隔从设备中获取数据,并在之后重新触发)
即使启用了抗锯齿功能,Qwt的性能也要好得多


注:

  • Qwt成熟、高效
  • QCustomPLot提供更好的外观和感觉。(略优于Qwt。)
将Qwt背景更改为白色、启用抗锯齿和栅格后,Qwt可以变得更好看

测试日期:

  • 为Qt5编译的Qwt 6.1.0
  • 为Qt5编译的QCustomPLot 1.2.1
  • Qt5.2.1
  • Linux localhost.localdomain 3.13.11-100.fc19.x86_64#1 SMP周三4月23日20:10:57 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
  • i3-3120M CPU@2.50GHz x 4
此外,Qt4上的QCustomPlot PEF形式相同

这些是我的发现,可能因条件而异

我必须切换回Q