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

c_k*_*c_k 17 plot qt qwt qcustomplot

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

Mik*_*nko 13

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

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

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

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

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

  • 与LGPL相反,Qwt许可证还允许闭源应用程序的静态链接.当这样做时,应用程序必须以某种方式指示(在README中),它正在使用Qwt.在动态链接的情况下,这不是必需的 - 它完全是LGPL. (4认同)

Pav*_*vel 8

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

QCustomPlot的优点:

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

QCustomPlot的缺点:

  • 非常严格的笛卡儿(读:没有饼图),
  • 在我的情况下花了一些时间来获得所有重要事项的必要控制(如果一个人喜欢实现与基础相当的扩展),
  • 也许是一个缓慢的演变(许多其他一个繁忙的人 - 项目),
  • 仅在主线程中可用(即,当您需要在多线程Web服务器中生成图片时,您需要在主线程中运行此库,无论这对您的实现意味着什么).

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


Kul*_*aka 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 48byte是浪费(对于1个样本),其中对于一个样本(对于x和y),仅Qwt需要16byte.

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)

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

  • QCustomPlot也可以与CMake一起使用。所以这里Qwt没有优势 (3认同)

Dar*_*nas 5

优点:

  • IMO 很容易上手(API 直观且有详细记录)
  • 平移和缩放时良好的绘图质量和快速响应。
  • 单个.h/.cpp文件(即不需要引用QT以外的编译库)

缺点:

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