将 Qt/C++ 用于普通的小部件应用程序,以及QQuickWidget
使用 QML,我将如何绘制如下所示的简单条形图?
我想这个问题可以追溯到 QML 的组成方式。
这些说明适用于 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 文件中。
在项目文件夹的对象文件夹中,创建一个qml文件夹。
将此位置的文件下载到该qml文件夹中,并确保解压缩该 zip 下载文件。
https://github.com/jwintz/qchart.js
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;
}
main()
函数中ui->setupUi(this);
:QString sQMLPath = QCoreApplication::applicationDirPath().append("/objects/qml/bar.qml");
ui->quickWidget->setSource(QString("file://").append(sQMLPath));
这将确保您的 QML 文件在生产(或调试)中部署时具有正确的路径。
注意:我尝试通过 Qt 资源 (qrc:// pathing) 加载这些 QML 和 JS 文件,但它似乎并不像那样,并且抱怨找不到 QChart.qml 文件或“QChart is不是类型”。
github上有一些用于 QML的chart.js库的实现。最受欢迎的可能是 Julien Wintz 的作品。我曾经尝试过,但没有找到一种方法来设置鼠标与 QML 画布元素内的单个图表/条的交互,而且对于更大的数据集,性能也不是最好的。为了获得最佳解决方案,您必须编写自己的图表库,这不应该是太多的工作(当然取决于您的要求)。
如果可以选择 Qt 企业版,请使用QtCharts。
更新:自 Qt 5.7 起,Qt Charts 将作为 Qt 的一部分提供 GPL 许可:https ://blog.qt.io/blog/2016/06/16/qt-5-7-released/
试试:https ://gist.github.com/paulbendixen/f14cd848a3f89a38ef37
图例可以打开和关闭,您可以在其中放入任何数据,只要它具有值、颜色和图例部分。
您还可以使用集成了 JS 库的库来进行绘图。我们已经开发了这个 MIT 许可版本,您可以将它与 GPL、LGPL 或闭源项目一起使用。也许,这对你来说也很有趣:https ://github.com/Elypson/ChartJs2QML