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

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

【问题讨论】:

    标签: qt plot qwt qcustomplot


    【解决方案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 个数据点)时填充速度很慢

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 1970-01-01
      • 2011-07-24
      • 2019-09-07
      • 2016-02-27
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多