与 Qwt 相比,QCustomPlot 的优点/缺点是啥?

Posted

技术标签:

【中文标题】与 Qwt 相比,QCustomPlot 的优点/缺点是啥?【英文标题】:What are the advantages/disadvantages of QCustomPlot, compared to Qwt?与 Qwt 相比,QCustomPlot 的优点/缺点是什么? 【发布时间】:2012-10-25 11:17:45 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

Qwt 实际上是根据“Qwt 许可”获得许可的,虽然它基于 LGPL,但似乎包含一个广告条款,实际上可能使其与 GPL 不兼容。 与 LGPL 相反,Qwt 许可证还允许静态链接用于闭源应用程序。这样做时,应用程序必须以某种方式(例如在自述文件中)表明它正在使用 Qwt。在动态链接的情况下,这不是必需的 - 它完全是 LGPL。【参考方案2】:

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

QCustomPlot 的优点

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

QCustomPlot 的缺点

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

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

【讨论】:

这听起来很奇怪 - 如果有人捐赠并获得了 LGPL 许可证,那么是什么阻止了被许可人在 LGPL 继续分发库时重新分发该库? LGPL 允许您重新分发。你的意思是你捐款是为了获得一个更宽松的(比 GPL)许可证?因为如果您获得了 LGPL 许可证,您就可以在整个互联网上合法地重新分发 LGPL 下的代码。 也许我们可以,但这不是我们的业务重点:-) 是的,我不建议你这样做。 =) 这肯定不符合它的精神 - 我只是说开发人员/所有者应该理解并解决这个问题。 据我所知,作者可能很清楚这个可能的分发渠道,但我还是会转发给他。感谢您指出这一点,这对我来说也是一条有趣的信息。 仅作记录,以防我的原始评论被误解,我不觉得“捐赠商业许可”很奇怪。程序员必须谋生! “捐赠为 LGPL”似乎是不可持续的。 “捐赠 LGPL -like 许可证”,但不允许重新授权给其他人,这很有意义。【参考方案3】:

当绘制很多点时。 并且用户将点集中到整个情节。即(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) 即 48 字节中的 32 字节是浪费的(对于 1 个样本),因为一个样本(对于 x 和 y)只有 Qwt 需要 16 字节。

阿飞明白,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 Con 两个频道都没有 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)

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

【讨论】:

QCustomPlot 也可以与 CMake 一起使用。所以这里对 Qwt 没有优势【参考方案4】:

优点:

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

缺点:

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

【讨论】:

以上是关于与 Qwt 相比,QCustomPlot 的优点/缺点是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Qwt 追加点到绘图

Qwt开发笔记:Qwt简介下载以及基础demo工程模板

Qt的QChartView实现缩放和放大功能

QtChart-Qt官方绘图库安装与使用

Qt编写自定义控件25-自定义QCustomPlot

QT