Compare commits

...

4 commits

9 changed files with 174 additions and 17 deletions

3
.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "external/QJsonModel"]
path = external/QJsonModel
url = https://github.com/dridk/QJsonModel.git

View file

@ -3,14 +3,37 @@ project(itat_challange_olympics)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
add_executable(itat_challange_olympics main.cpp) find_package(Qt6 COMPONENTS
Core REQUIRED
Gui REQUIRED
Widgets REQUIRED
Network REQUIRED
Quick REQUIRED
)
find_package(Qt6 REQUIRED COMPONENTS Core) # SET(MODULES_EXTERNAL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external)
target_link_libraries(itat_challange_olympics PRIVATE Qt6::Core)
find_package(Qt6 REQUIRED COMPONENTS Quick) # include_directories(BEFORE ${MODULES_EXTERNAL_DIR})
target_link_libraries(itat_challange_olympics PRIVATE Qt6::Quick)
find_package(Qt6 REQUIRED COMPONENTS Network) set(CMAKE_AUTORCC ON)
target_link_libraries(itat_challange_olympics PRIVATE Qt6::Network) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
qt_add_executable(itat_challange_olympics application.qrc main.cpp
external/QJsonModel/include/QJsonModel.hpp
external/QJsonModel/QJsonModel.cpp)
target_include_directories(itat_challange_olympics PRIVATE
external/QJsonModel/include)
# add_subdirectory(${MODULES_EXTERNAL_DIR}/QJsonModel)
# target_link_libraries(itat_challange_olympics PRIVATE Qt6::QJsonModelStatic)
# target_include_directories(itat_challange_olympics PRIVATE ${CMAKE_BINARY_DIR}/include)
target_link_libraries(itat_challange_olympics
PUBLIC
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Network
Qt6::Quick
)

27
EventInfoPage.qml Normal file
View file

@ -0,0 +1,27 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
Page {
id: root
property string event_id
header: ToolBar {
ToolButton {
text: qsTr("Back")
anchors.left: parent.left
anchors.leftMargin: 10
anchors.verticalCenter: parent.verticalCenter
onClicked: root.StackView.view.pop()
}
Label {
id: pageTitle
font.pixelSize: 20
anchors.centerIn: parent
text: qsTr("Event Info")
}
}
}

38
EventsPage.qml Normal file
View file

@ -0,0 +1,38 @@
import QtQuick
import QtQuick.Controls
Page {
id: root
header: ToolBar {
Label {
text: qsTr("Olympia 2024 Events")
font.pixelSize: 20
anchors.centerIn: parent
}
}
ListView {
id: listView
objectName: eventsList
anchors.fill: parent
topMargin: 48
leftMargin: 48
bottomMargin: 48
rightMargin: 48
spacing: 20
model: ["Albert Einstein", "Ernest Hemingway", "Hans Gude"]
delegate: ItemDelegate {
text: modelData
width: listView.width - listView.leftMargin - listView.rightMargin
height: avatar.implicitHeight + 32
leftPadding: avatar.implicitWidth + 32
onClicked: root.StackView.view.push("EventInfoPage.qml", { event_id: 1 })
Image {
id: avatar
// source: "images/" + modelData.replace(" ", "_") + ".png"
}
}
}
}

View file

@ -2,12 +2,24 @@ import QtQuick
import QtQuick.Controls import QtQuick.Controls
ApplicationWindow { ApplicationWindow {
width: 400 width: 400
height: 400 height: 400
visible: true visible: true
Button { TreeView {
id: button id: listView
text: "A Special Button" anchors.fill: parent
model: sports // This will reference the model added to the context
delegate: ItemDelegate {
text: eventName
} }
Component.onCompleted : console.log(Object.keys(sports.data))
}
// StackView {
// id: stackView
// anchors.fill: parent
// initialItem: EventsPage {}
// }
} }

6
application.qrc Normal file
View file

@ -0,0 +1,6 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/">
<file>qtquickcontrols2.conf</file>
</qresource>
</RCC>

1
external/QJsonModel vendored Submodule

@ -0,0 +1 @@
Subproject commit ed3652666d4954c2262eb5ceee8fda3e613f8c0c

View file

@ -19,21 +19,38 @@
// console output // console output
#include <QDebug> #include <QDebug>
#include <qlogging.h>
// #include <iostream> // #include <iostream>
#include "QJsonModel.hpp"
#include <QTreeView>
#include <QApplication>
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QGuiApplication app(argc, argv); QApplication app(argc, argv);
QQmlEngine engine; QQmlEngine engine;
QQmlContext *objectContext = new QQmlContext(engine.rootContext()); QQmlContext *objectContext = new QQmlContext(engine.rootContext());
QQmlComponent component(&engine, "application.qml");
QObject *object = component.create(objectContext);
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<QObject*>("eventsList");
// QQmlContext *componentContext = component.creationContext();
// ... delete object and objectContext when necessary // ... delete object and objectContext when necessary
// create custom temporary event loop on stack // create custom temporary event loop on stack
QEventLoop eventLoop; QEventLoop eventLoop;
@ -53,12 +70,30 @@ int main(int argc, char *argv[])
QString strReply = (QString)reply->readAll(); QString strReply = (QString)reply->readAll();
//parse json //parse json
// qDebug() << "Response:" << strReply; // qDebug() << "Response:" << strReply;
QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8()); QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonObj = jsonResponse.object(); 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(); qDebug() << "Competitor:" << jsonObj["units"][0]["competitors"][0]["name"].toString();
delete reply; delete reply;

12
qtquickcontrols2.conf Normal file
View file

@ -0,0 +1,12 @@
[Controls]
Style=Material
[Universal]
Theme=Material
Accent=Red
[Material]
Theme=Light
Accent=Teal
Primary=BlueGrey