17

我现在使用 Qwt 两年了。我喜欢它的面向对象的类,这使得调整绘图和功能变得非常容易。这些天来,QCustomPlot 变得越来越流行并与 Qwt 竞争。当然,我确实比较了 API。不过,我对这两个图书馆有经验的用户的证词很感兴趣。什么是方便?什么不是?有什么陷阱吗?

4

4 回答 4

13

我不会称自己为“有经验的”,因为我只使用了几个月的 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 “更积极开发”的优势

于 2012-11-02T20:17:14.247 回答
8

我无法比较这两个库,因为我只使用 QCustomPlot(现在一年),但我相信我的评论可能对其他人有用。

QCustomPlot 的优点

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

QCustomPlot 的缺点

  • 非常严格的笛卡尔坐标(阅读:没有饼图),
  • 在我的情况下,花了一些时间来掌握所有重要的事情(如果有人喜欢实施与基础相当质量的扩展),
  • 也许发展有点慢(就像许多其他忙碌的人项目一样),
  • 仅在主线程中可用(即当您需要在多线程网络服务器中生成图片时,您需要在主线程中运行此库,无论这对您的实现意味着什么)。

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

于 2013-12-10T12:47:58.917 回答
8

当绘制很多点时。并且用户将点集中到整个情节。即(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)

如果我在某些方面错了,请纠正我。

于 2014-07-11T04:03:27.490 回答
4

优点:

  • 易于上手 IMO(API 直观且有据可查)
  • 平移和缩放时具有良好的绘图质量和快速响应。
  • 单个 .h/.cpp 文件(即无需引用 QT 以外的编译库)

缺点:

  • GPL(不是 LGPL)
  • 内部使用的数据结构为每个数据点存储 6double秒,即使您只需要XY
  • 在内部,它使用 aQMap来存储数据点并保持它们的排序。平移和缩放非常有效,但当样本数量很大(例如 1,000,000 个数据点)时填充速度很慢
于 2015-01-05T04:15:02.857 回答