Рисование простых гистограмм в QML
3 ответа
Эти инструкции предназначены для Mac OSX. Вам придется немного изменить это для Windows или Linux:
В приложении на основе виджетов Qt/C++ добавьте QQuickWidget в главное окно и установите его размер около 500x500. Не устанавливайте свойство Source для этого виджета.
В файле проекта .pro настройте
QT
параметр для включенияquickwidgets
, Также добавьте следующее в конец этого файла:
mac {
Resources.files = objects
Resources.path = Contents/MacOS
QMAKE_BUNDLE_DATA += Resources
}
Создайте папку объектов внутри папки вашего проекта как контейнер общего назначения, который будет скопирован в производственный.app-файл при запуске приложения.
Внутри этой папки объектов в папке вашего проекта создайте папку qml.
Загрузите файлы из этого места в эту папку qml и обязательно разархивируйте этот zip-файл.
https://github.com/jwintz/qchart.js
- Создайте файл bar.qml в том же каталоге 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;
}
- В вашем mainwindow.cpp добавьте это в ваш
main()
функционировать через некоторое время после того, как вы делаетеui->setupUi(this);
линия:
QString sQMLPath = QCoreApplication::applicationDirPath().append("/objects/qml/bar.qml");
ui->quickWidget->setSource(QString("file://").append(sQMLPath));
Это обеспечит правильность пути к файлу QML при его развертывании в рабочей среде (или отладке).
Примечание: я пытался загрузить эти файлы QML и JS через Qt Resource (qrc:// pathing), но, похоже, это не совсем так, и пожаловался либо на то, что не нашел файл QChart.qml, либо на сообщение "QChart is не тип ".
- Когда вы запустите свое приложение, вы должны увидеть гистограмму. Затем вы можете изучить веб-сайт chart.js для получения дополнительной информации о том, как управлять этим графиком.
На github есть несколько реализаций библиотеки chart.js для QML. Самым популярным, вероятно, является тот, который Жюльен Винц. Однажды я попробовал это, но не нашел способа настроить взаимодействие мыши с отдельными графиками / гистограммами внутри элемента холста QML, а также производительность была не самой лучшей для больших наборов данных. Для лучшего решения вам нужно написать свою собственную библиотеку диаграмм, которая не должна быть слишком сложной (конечно, в зависимости от ваших требований).
Если Qt Enterprise Edition является опцией, используйте 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