Qt 6.11 is out! See what's new in the release
blog
C++ Model to QML ChartView - Not Showing Anything
-
Hello, I tried to make a C++ model. Then put it to ChartView in QML. Graph is not showing anything. I can't find anything related example online. Pls help me identify what I am doing wrong.
main.cpp
#include <QApplication> #include <QQmlApplicationEngine> #include "DataModel.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QQmlApplicationEngine engine; DataModel MyModel; qmlRegisterSingletonInstance ("hello.com",1,0,"MyData",&MyModel); const QUrl url(u"qrc:/CPPModelForChart/main.qml"_qs); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); return app.exec(); }DataModel.h
#ifndef DATAMODEL_H #define DATAMODEL_H #include <QObject> #include <QAbstractTableModel> #include <QList> #include <QPointF> class DataModel : public QAbstractTableModel { Q_OBJECT public: enum { ValueRole = Qt::DisplayRole }; explicit DataModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; QHash<int, QByteArray> roleNames() const; signals: private: QList <QPointF> m_points; }; #endif // DATAMODEL_HDataModel.cpp
#include "DataModel.h" DataModel::DataModel(QObject *parent) : QAbstractTableModel{parent} { m_points << QPointF(0, 0) << QPointF(1, 1) << QPointF(2, 4); } int DataModel::rowCount(const QModelIndex &parent) const { return m_points.size(); } int DataModel::columnCount(const QModelIndex &parent) const { return 2; } QVariant DataModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || role != Qt::DisplayRole) return QVariant(); const QPointF p = m_points[index.row()]; if (index.column() == 0) return p.x(); return p.y(); } QHash<int, QByteArray> DataModel::roleNames() const { QHash<int, QByteArray> mappings; mappings [ValueRole] = "value"; return mappings; }main.qml
import QtQuick import QtCharts import hello.com as Peter Window { width: 640 height: 480 visible: true title: qsTr("Hello World") // Write chartview that can take model from c++ ChartView { id: dataChartView animationOptions: ChartView.NoAnimation antialiasing: true anchors.fill: parent ValuesAxis { id: axisXdata min: 0 max: 3 } ValuesAxis { id: axisYdata min: 0 max: 5 } LineSeries { id: dataLineSeries name: "Data" axisX: axisXdata axisY: axisYdata useOpenGL: true } VXYModelMapper { id: dataModelMapper model: Peter.MyData series: dataLineSeries firstRow: 0 xColumn: 0 yColumn: 1 } } } -
Update: I don't know why. It works when I remove OpenGL stuff from QML file.
-
S Sajjad Ali has marked this topic as solved on