#include #include #include #include // networking #include #include #include #include #include // json parsing #include #include #include #include #include // console output #include #include // #include #include "QJsonModel.hpp" #include #include int main(int argc, char *argv[]) { QApplication app(argc, argv); QQmlEngine engine; QQmlContext *objectContext = new QQmlContext(engine.rootContext()); QStringList dataList = { "Item 1", "Item 2", "Item 3", "Item 4" }; //objectContext->setContextProperty("sports", QVariant::fromValue(dataList)); //QQmlComponent component(&engine, "application.qml"); //QObject *object = component.create(objectContext); // QObject *eventsList = object->findChild("eventsList"); // QQmlContext *componentContext = component.creationContext(); // ... delete object and objectContext when necessary // create custom temporary event loop on stack QEventLoop eventLoop; // "quit()" the event-loop, when the network request "finished()" QNetworkAccessManager mgr; QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit())); QString endpoint { "https://sph-s-api.olympics.com/summer/schedules/api/ENG/schedule/discipline/ARC" }; // the HTTP request QNetworkRequest req( (QUrl( endpoint )) ); QNetworkReply *reply = mgr.get(req); eventLoop.exec(); // blocks stack until "finished()" has been called if (reply->error() == QNetworkReply::NoError) { //success QString strReply = (QString)reply->readAll(); //parse json // qDebug() << "Response:" << strReply; QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8()); QJsonObject jsonObj = jsonResponse.object(); QJsonModel * model = new QJsonModel(); // qDebug() << QJsonDocument(jsonObj["units"].toArray()).toJson(); // model->loadJson(QJsonDocument(jsonObj["units"].toArray()).toJson()); model->loadJson(strReply.toUtf8()); objectContext->setContextProperty("sports", QVariant::fromValue(model)); // componentContext->setContextProperty("sports", model); // objectContext->setContextProperty("sports", QVariant::fromValue(dataList)); QQmlComponent component(&engine, "application.qml"); QObject *object = component.create(objectContext); QTreeView * view = new QTreeView; view->setModel(model); view->show(); qDebug() << "Competitor:" << jsonObj["units"][0]["competitors"][0]["name"].toString(); delete reply; } else { //failure qDebug() << "Failure" <errorString(); delete reply; } return app.exec(); }