在 QML 中绘制简单的条形图

Posted

技术标签:

【中文标题】在 QML 中绘制简单的条形图【英文标题】:Drawing Simple Bar Charts in QML 【发布时间】:2015-09-06 03:53:34 【问题描述】:

将 Qt/C++ 用于普通的小部件应用程序,以及将 QQuickWidget 与 QML 一起使用,我将如何绘制如下所示的简单条形图?

我想这个问题可以追溯到 QML 是如何组成的。

【问题讨论】:

你尝试过编写任何 QML 了吗? 【参考方案1】:

这些说明适用于 Mac OSX。对于 Windows 或 Linux,您必须稍微改变一下:

    在基于 Qt/C++ 小部件的应用程序中,将 QQuickWidget 添加到您的 MainWindow 并将其设置为大约 500x500 大小。不要在该小部件上设置 Source 属性。

    在您的 .pro 项目文件中,调整您的 QT 参数以包含 quickwidgets。此外,将以下内容添加到此文件的底部:

mac 
  Resources.files = objects
  Resources.path = Contents/MacOS
  QMAKE_BUNDLE_DATA += Resources

    在您的项目文件夹中创建一个 objects 文件夹作为通用容器,该容器将在应用程序运行时复制到生产 .app 文件中。

    在项目文件夹的 objects 文件夹中,创建一个 qml 文件夹。

    将文件从该位置下载到该 qml 文件夹,并确保解压缩该 zip 下载文件。

       https://github.com/jwintz/qchart.js

    在同一 qml 目录中创建一个 bar.qml 文件。该文件的内容应如下所示:
import QtQuick 2.0

import "."
import "QChart.js"        as Charts
import "QChartGallery.js" as ChartsData

Chart 
  id: chart_bar;
  width: 450;
  height: 450;
  chartAnimated: false;
  chartData: ChartsData.ChartBarData;
  chartType: Charts.ChartType.BAR;

    在您的 ma​​inwindow.cpp 中,在您执行 ui->setupUi(this); 行之后的某个时间将其添加到您的 main() 函数中:
QString sQMLPath = QCoreApplication::applicationDirPath().append("/objects/qml/bar.qml");
ui->quickWidget->setSource(QString("file://").append(sQMLPath));

       这将确保您的 QML 文件在部署到生产环境时具有正确的路径(或 调试)。

注意:我尝试通过 Qt 资源 (qrc:// 路径) 加载这些 QML 和 JS 文件,但它似乎并不正确,并且抱怨找不到 QChart.qml 文件或一条消息“QChart 不是类型”。

    当您运行应用程序时,您应该会看到一个条形图。然后,您可以研究chart.js website,了解有关如何操作此图表的更多信息。

【讨论】:

【参考方案2】:

github 上提供了一些用于 QML 的 chart.js 库的实现。最受欢迎的可能是the one by Julien Wintz。我曾经尝试过,但没有找到一种方法来设置鼠标与 QML 画布元素内的单个图表/条的交互,而且对于更大的数据集,性能也不是最好的。为了获得最佳解决方案,您必须编写自己的图表库,这不应该是太多工作(当然取决于您的要求)。

如果可以选择 Qt 企业版,请选择QtCharts。

更新:自 Qt 5.7 起,Qt Charts 将作为 Qt 的一部分提供 GPL 许可:https://blog.qt.io/blog/2016/06/16/qt-5-7-released/

【讨论】:

看起来很有希望,但文档真的很差。我不知道如何安装它。 Julien Wintz 的版本已离线。 QtCharts 确实以 GPL BUT NOT LGPL 的形式提供,这是闭源商业软件所需要的。到目前为止,只有 Chart Js 实现 vor v1.0.x 可用,而不是 2.0,遗憾的是【参考方案3】:

试试:https://gist.github.com/paulbendixen/f14cd848a3f89a38ef37

图例可以打开和关闭,你可以在里面放任何数据,只要它有值、颜色和图例部分。

【讨论】:

【参考方案4】:

您还可以使用集成了 JS 库的库来进行绘图。我们已经开发了这个 MIT 许可证版本,您可以将它与 GPL、LGPL 或闭源项目一起使用。也许,这对你来说也很有趣:https://github.com/Elypson/ChartJs2QML

【讨论】:

以上是关于在 QML 中绘制简单的条形图的主要内容,如果未能解决你的问题,请参考以下文章

使用echarts绘制条形图和扇形图

Matplotlib 绘制条形图,在数据框中具有 2 列关系

在python中绘制条形图[重复]

Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图垂直条形图分组条形图堆叠条形图

如何在python中绘制条形图

matlab 绘制条形图