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

时间:2012-10-25 11:17:45

标签: qt plot qwt qcustomplot

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

4 个答案:

答案 0 :(得分:13)

我不会称自己为“经验丰富”,因为我只使用Qwt几个月,而QCustomPlot只用了几个星期。话虽这么说,我的印象是:

  • QCustomPlot目前似乎更积极地开发。最新版本发布于2012年8月(而Qwt的最新版本可追溯至2011年)。主观上,它的界面似乎与Qt框架更加“一致”。
  • 另一方面,Qwt似乎更成熟,更有特色。例如,当前版本的QCustomPlot没有直接的方法来设置轴矩形的颜色背景(仅支持将背景设置为用户提供的像素图)。另一个例子 - Qwt有一些特殊的类和方法,可以方便地绘制和缩放具有大量点的曲线。我在QCustomPlot中找不到那样的东西。

编辑:QCustomPlot的作者aware缺少设置情节背景的功能,并承诺在即将发布的版本中添加它。

QCustomPlot和Qwt - 许可之间还有另一个重要区别。   - Qwt是LGPL,因此您可以将其链接到非GPL项目。 QCustomPlot是GPL v.3,许多人(包括我自己)发现WAY过于严格。如果您需要LGPL许可,QCustomPlot作者会邀请他联系。

EDIT2(2013年3月25日):Qwt分支机构的新版本5. *和6. *于11月出现,取消了QCustomplot“更积极发展”的优势

答案 1 :(得分:8)

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

QCustomPlot的优点

  • Gitorious公开提供,
  • 愿意帮忙的生活用户群(包括autor本人),
  • 对LGPL许可的开放性(以换取捐款,在我的情况下),
  • 非常干净简洁的界面,
  • 很容易找到错误,如果存在(我的错误修正很少超过一行)
  • 易于扩展;
  • 对你想要粉碎笛卡尔绘图库的任何内容非常骇人听闻,
  • 好的文档,
  • 以1 .h和一个.cpp文件的浓缩形式提供 - 方便快速集成或专门构建的一个小工具,
  • 非常好的表现(在我的所有用例中),
  • 很明显,作者喜欢漂亮的代码,可以生成一个,
  • 非常深思熟虑的路线图(未来很长时间)。

QCustomPlot的缺点

  • 非常严格的笛卡儿(读:没有饼图),
  • 在我的案例中花了一些时间来掌握所有重要的东西(如果有人喜欢实现与基础相当的扩展),
  • 可能是一个缓慢的演变(和许多其他人一样 - -man项目),
  • 仅在主线程中可用(即,当您需要在多线程网络服务器中生成图片时,您需要在主线程中运行此库,无论这对您的实现意味着什么)。

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

答案 2 :(得分:8)

绘制大量积分时。 并且用户将该点集中到整个情节。 ie(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(双))内存被浪费掉3 * 2 * sizeof(双) 即48字节中的32字节是浪费(对于1个样本),因为对于一个样本,仅Qwt需要16字节(对于x和y)。

afai明白,也可以在Qwt中实现errorbar

  • 点数相等(96KiloSamples / sec * 10second buffering = 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
  • Con两个频道都没有IRC频道(至少不在Freenode上)
  • Con QCustomPlot将多个示例推送到一个可执行文件中。
  • Pro Qwt有许多分布在许多可执行文件上的例子
  • Con QCustomPlot没有任何QtCreator插件
  • Con QCustomPlot在回购中不可用(至少在Fedora 19上没有)
  • Pro Qwt有很多其他好东西
  • Con Qwt体积庞大:p
  • Pro Qwt支持CMake
  • Pro Qwt更灵活(afaif)

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

答案 3 :(得分:4)

<强>优点:

  • 易于上手IMO(API直观且文档齐全)
  • 平移质量和平移和缩放时的快速响应。
  • 单个.h / .cpp文件(即不需要引用QT以外的编译库)

<强>缺点:

  • GPL(不是LGPL)
  • 内部使用的数据结构为每个数据点存储6 double个即使只需XY
  • 在内部,它使用QMap来存储数据点并对其进行排序。平移和缩放非常有效,但当样本数量很大(例如1,000,000个数据点)时填充速度非常慢