我现在使用 Qwt 两年了。我喜欢它的面向对象的类,这使得调整绘图和功能变得非常容易。这些天来,QCustomPlot 变得越来越流行并与 Qwt 竞争。当然,我确实比较了 API。不过,我对这两个图书馆有经验的用户的证词很感兴趣。什么是方便?什么不是?有什么陷阱吗?
4 回答
我不会称自己为“有经验的”,因为我只使用了几个月的 Qwt 和几周的 QCustomPlot。话虽如此,我的印象是:
- QCustomPlot 目前似乎开发得更加积极。最后一次发布是在 2012 年 8 月(而 Qwt 的最后一次发布可以追溯到 2011 年)。主观上,它的界面似乎更符合 Qt 框架。
- 另一方面,Qwt 似乎更成熟、更有特色。例如,当前版本的 QCustomPlot 没有直接的方法来设置轴矩形的颜色背景(仅支持将背景设置为用户提供的像素图)。另一个例子 - Qwt 具有特殊的类和方法,可以方便地绘制和放大具有大量点的曲线。我在 QCustomPlot 中没有找到类似的东西。
编辑:QCustomPlot 的作者意识到缺少设置绘图背景的功能,并承诺在即将发布的版本中添加它。
QCustomPlot 和 Qwt 之间还有另一个重要区别 - 许可。- Qwt 是 LGPL,因此您可以将其链接到非 GPL 项目。QCustomPlot 是 GPL v.3,很多人(包括我自己)觉得它太严格了。如果您需要 LGPL 许可证,QCustomPlot 作者邀请与他联系。
EDIT2(2013 年 3 月 25 日):Qwt 分支 5.* 和 6.* 的新版本于 11 月出现,这取消了 QCustomplot “更积极开发”的优势
我无法比较这两个库,因为我只使用 QCustomPlot(现在一年),但我相信我的评论可能对其他人有用。
QCustomPlot 的优点:
- 在 Gitorious 上公开发布,
- 愿意提供帮助的生活用户群(包括作者本人),
- 对 LGPL 许可的开放性(以我为例,以换取捐赠),
- 非常干净简洁的界面,
- 很容易找到错误(如果存在)(我的错误修复很少超过一行)
- 易于扩展;
- 非常容易破解您想从笛卡尔绘图库中粉碎的任何内容,
- 良好的文档,
- 以 1 .h 和一个 .cpp 文件的压缩形式提供 - 便于快速集成或专门构建的一个小部件,
- 非常好的性能(在我所有的用例中),
- 很明显,作者喜欢漂亮的代码,并且可以产生一个,
- 深思熟虑的路线图(很长一段时间)。
QCustomPlot 的缺点:
- 非常严格的笛卡尔坐标(阅读:没有饼图),
- 在我的情况下,花了一些时间来掌握所有重要的事情(如果有人喜欢实施与基础相当质量的扩展),
- 也许发展有点慢(就像许多其他忙碌的人项目一样),
- 仅在主线程中可用(即当您需要在多线程网络服务器中生成图片时,您需要在主线程中运行此库,无论这对您的实现意味着什么)。
如果需要 LGPL-ish 许可证,可能没有免费选项(取决于作者的考虑)。鉴于图书馆的质量和可用性,我公司为换取 LGPL 许可协议而提供的捐赠并没有不当。
当绘制很多点时。并且用户将点集中到整个情节。即(x,y轴被像素完全覆盖)
(点数 = 下面给出的计算)
拖动情节时:
- Qwt 提供了比QCustomPlot更好的性能。
- QCustomPlot 拖动/重新绘制比 Qwt 滞后得多,这对 UI 不利。
- Qwt 滞后是可以忽略的并且是可以接受的。
- Qwt 需要较少的处理。
我注意到的是:在拖动时,Qwt 只拖动绘图区域,然后将其拖放到该区域上。而 QCustomPlot 尝试在删除之前重新绘制。(请注意,但这可以帮助 QCustomPlot 人做得更好。)
此外,Qwt 提供了可以在外部管理的原始缓冲区选项。我能够将(QcustomPlot)150Mb 减少到小于(Qwt)40Mb。保持,
QCustomPlot 强制用户将内存分配给 X 轴 (errorbar+ , errorbar-), y 轴 (errorbar+, errorbar-) (2 * 2 * sizeof(double)) 内存浪费了 3 * 2 * sizeof(double) 即 32byte out 48 字节是浪费的(对于 1 个样本),因为一个样本(对于 x 和 y)只有 Qwt 需要 16 字节。
afai 明白了,在Qwt中也可以实现errorbar
- 相同的点数(96KiloSamples/sec * 10 秒缓冲 = 96 * 1000 * 10 = ~1M)
- 在 QCustomPlot 中禁用抗锯齿并在 Qwt中启用
- 相同的重新绘图算法。(以相同的时间间隔从设备获取数据,然后重新绘制)
即使启用了抗锯齿,Qwt 的性能也要好得多。
笔记:
- Qwt 成熟、高效。
- QCustomPLot 提供更好的外观和感觉。(略好于 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 Wed Apr 23 20:10:57 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
- i3-3120M CPU @ 2.50GHz x 4
此外,QCustomPlot 在 Qt4 上的表现相同。
这些是我的发现,可能因条件而异。
我已经切换回Qwt。希望这有助于其他人选择。:)
次要的:
- Con QCustomPLot 需要单独下载 qmake 文件。(对于初学者来说令人沮丧)
- Con Qwt 有多个文件要编译。
- Pro QCUstomPlot 只有两个文件:source 和 header
- 两个频道都没有 IRC 频道(至少在 Freenode 上没有)
- Con QCustomPlot 将多个示例推送到一个可执行文件中。
- Pro Qwt 有许多分布在许多可执行文件上的示例
- Con QCustomPlot 没有任何 QtCreator 插件
- Con QCustomPlot 在 repo 中不可用(至少在 Fedora 19 上不可用)
- Pro Qwt 还有很多其他的好东西
- Con Qwt 很笨重:p
- Pro Qwt 支持 CMake
- Pro Qwt 更加灵活(afaif)
如果我在某些方面错了,请纠正我。
优点:
- 易于上手 IMO(API 直观且有据可查)
- 平移和缩放时具有良好的绘图质量和快速响应。
- 单个 .h/.cpp 文件(即无需引用 QT 以外的编译库)
缺点:
- GPL(不是 LGPL)
- 内部使用的数据结构为每个数据点存储 6
double
秒,即使您只需要X
和Y
- 在内部,它使用 a
QMap
来存储数据点并保持它们的排序。平移和缩放非常有效,但当样本数量很大(例如 1,000,000 个数据点)时填充速度很慢