From f4639ba0688c95a234b30375677df75b95c3efd0 Mon Sep 17 00:00:00 2001 From: dorian Date: Fri, 15 Feb 2019 15:47:04 +0100 Subject: [PATCH] - added AppSettings class and score store - added --- QcookieClicker.pro | 8 +- QcookieClicker.pro.user | 514 ++++++++++++++++----------------- headers/appsettings.h | 49 ++++ main.qml | 57 ---- qml/ShopPopup.qml | 55 ++++ qml/components/GameButton.qml | 22 ++ qml/main.qml | 91 ++++++ qml.qrc => qml/qml.qrc | 2 + shared/graphics/shopBottom.png | Bin 0 -> 4011 bytes shared/graphics/shopTop.png | Bin 0 -> 13572 bytes shared/icons/shop.png | Bin 0 -> 20289 bytes shared/shared.qrc | 3 + shared/shop.xcf | Bin 0 -> 59807 bytes sources/appsettings.cpp | 90 ++++++ main.cpp => sources/main.cpp | 4 + 15 files changed, 579 insertions(+), 316 deletions(-) create mode 100644 headers/appsettings.h delete mode 100644 main.qml create mode 100644 qml/ShopPopup.qml create mode 100644 qml/components/GameButton.qml create mode 100644 qml/main.qml rename qml.qrc => qml/qml.qrc (51%) create mode 100644 shared/graphics/shopBottom.png create mode 100644 shared/graphics/shopTop.png create mode 100644 shared/icons/shop.png create mode 100644 shared/shop.xcf create mode 100644 sources/appsettings.cpp rename main.cpp => sources/main.cpp (75%) diff --git a/QcookieClicker.pro b/QcookieClicker.pro index b2ebf38..0816d86 100644 --- a/QcookieClicker.pro +++ b/QcookieClicker.pro @@ -13,9 +13,13 @@ DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ - main.cpp + sources/main.cpp \ + sources/appsettings.cpp -RESOURCES += qml.qrc \ +HEADERS += \ + headers/appsettings.h + +RESOURCES += qml/qml.qrc \ shared/shared.qrc # Additional import path used to resolve QML modules in Qt Creator's code model diff --git a/QcookieClicker.pro.user b/QcookieClicker.pro.user index 1a1ab49..4238654 100644 --- a/QcookieClicker.pro.user +++ b/QcookieClicker.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -8,7 +8,7 @@ ProjectExplorer.Project.ActiveTarget - 2 + 0 ProjectExplorer.Project.EditorSettings @@ -61,6 +61,258 @@ ProjectExplorer.Project.Target.0 + + Desktop Qt 5.11.3 GCC 64bit + Desktop Qt 5.11.3 GCC 64bit + qt.qt5.5113.gcc_64_kit + 0 + 0 + 0 + + /home/dorian/build-QcookieClicker-Desktop_Qt_5_11_3_GCC_64bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + /home/dorian/build-QcookieClicker-Desktop_Qt_5_11_3_GCC_64bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + /home/dorian/build-QcookieClicker-Desktop_Qt_5_11_3_GCC_64bit-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Make + + Qt4ProjectManager.MakeStep + + false + + + false + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + true + clean + + false + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy Configuration + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + QcookieClicker + QcookieClicker2 + Qt4ProjectManager.Qt4RunConfiguration:/home/dorian/Documents/git/qcookieclicker/QcookieClicker.pro + QcookieClicker.pro + + 3768 + false + true + true + false + false + true + + /home/dorian/build-QcookieClicker-Desktop_Qt_5_11_3_GCC_64bit-Debug + + 1 + + + + ProjectExplorer.Project.Target.1 Android for armeabi-v7a (Clang Qt 5.11.3 for Android ARMv7) Android for armeabi-v7a (Clang Qt 5.11.3 for Android ARMv7) @@ -351,7 +603,7 @@ 0 - QcookieClicker + Qt4ProjectManager.AndroidRunConfiguration:/home/dorian/QcookieClicker/QcookieClicker.pro @@ -366,7 +618,7 @@ - ProjectExplorer.Project.Target.1 + ProjectExplorer.Project.Target.2 Android for x86 (Clang Qt 5.11.3 for Android x86) Android for x86 (Clang Qt 5.11.3 for Android x86) @@ -660,7 +912,7 @@ 0 - QcookieClicker + Qt4ProjectManager.AndroidRunConfiguration:/home/dorian/QcookieClicker/QcookieClicker.pro @@ -674,258 +926,6 @@ 1 - - ProjectExplorer.Project.Target.2 - - Desktop Qt 5.11.3 GCC 64bit - Desktop Qt 5.11.3 GCC 64bit - qt.qt5.5113.gcc_64_kit - 0 - 0 - 0 - - /home/dorian/build-QcookieClicker-Desktop_Qt_5_11_3_GCC_64bit-Debug - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - false - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - false - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Debug - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - true - - - /home/dorian/build-QcookieClicker-Desktop_Qt_5_11_3_GCC_64bit-Release - - - true - qmake - - QtProjectManager.QMakeBuildStep - false - - false - false - true - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - false - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - false - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - - /home/dorian/build-QcookieClicker-Desktop_Qt_5_11_3_GCC_64bit-Profile - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - true - true - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - false - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - false - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Profile - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - 3 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy Configuration - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - 2 - - QcookieClicker - - Qt4ProjectManager.Qt4RunConfiguration:/home/dorian/QcookieClicker/QcookieClicker.pro - QcookieClicker.pro - - 3768 - false - true - true - false - false - true - - /home/dorian/build-QcookieClicker-Desktop_Qt_5_11_3_GCC_64bit-Debug - - 1 - - ProjectExplorer.Project.TargetCount 3 diff --git a/headers/appsettings.h b/headers/appsettings.h new file mode 100644 index 0000000..144d49c --- /dev/null +++ b/headers/appsettings.h @@ -0,0 +1,49 @@ +#ifndef APPSETTINGS_H +#define APPSETTINGS_H + +#include +#include +#include +#include + +class AppSettings : public QObject +{ + Q_OBJECT + + Q_PROPERTY(NOTIFY themeChanged) + +public: + explicit AppSettings(QObject *parent = nullptr); + // This is the Constructor of the AppSettings class + + ~AppSettings(); + // This is the Destructor of the AppSettings class + +private: + QSettings *settingsManager; + // QSettings object which cares about our settings.ini file + + QSettings *themeSettingsManager; + // QSettings object which cares about the themes + +signals: + void themeChanged(); + +public slots: + Q_INVOKABLE QString read(const QString &key); + // function to read values from the settings file + + Q_INVOKABLE void write(const QString &key, const QVariant &value); + // function to write values to the settings file + + Q_INVOKABLE void setDefault(const QString &key, const QVariant &defaultValue); + // function to create a key (/ setting) with a default value if it hasnt been ceated yet + + Q_INVOKABLE QString theme(QString key); + // function to get style settings from a theme file + + Q_INVOKABLE void reloadTheme(); + // function to reload the theme and tell all child that it has changed +}; + +#endif // APPSETTINGS_H diff --git a/main.qml b/main.qml deleted file mode 100644 index 13bf0ed..0000000 --- a/main.qml +++ /dev/null @@ -1,57 +0,0 @@ -import QtQuick 2.9 -import QtQuick.Window 2.2 -import QtQuick.Controls 2.4 - -Window { - visible: true - width: 640 - height: 480 - title: "QcookieClicker" - - Page { - id: app - - property int level: 0 - - anchors.fill: parent - - Label { - id: levelLa - - anchors { - top: parent.top - horizontalCenter: parent.horizontalCenter - topMargin: 20 - } - - font.pixelSize: 30 - - text: app.level - } - - Button { - id: cookieBt - - anchors.centerIn: parent - - height: parent.height * 0.3 - width: height - - scale: pressed ? 0.8:1 - - background: Image { - source: "qrc:/icons/cookie.png" - } - - onClicked: { - app.level = app.level + 1 - } - - Behavior on scale { - NumberAnimation { - duration: 100 - } - } - } - } -} diff --git a/qml/ShopPopup.qml b/qml/ShopPopup.qml new file mode 100644 index 0000000..9fde9f1 --- /dev/null +++ b/qml/ShopPopup.qml @@ -0,0 +1,55 @@ +import QtQuick 2.9 +import QtQuick.Controls 2.4 + +Popup { + id: control + + modal: true + + height: 300 + + Rectangle { + id: contentRect + + height: parent.height + + width: topImg.width * 0.836 + anchors.horizontalCenter: parent.horizontalCenter + + color: "white" + + + } + + Image { + id: topImg + + anchors { + bottom: contentRect.top + bottomMargin: -height * 0.22 + } + source: "qrc:/graphics/shopTop.png" + fillMode: Image.PreserveAspectFit + width: parent.width + } + + Image { + id: bottomImg + + anchors { + top: contentRect.bottom + topMargin: -height * 0.33 + } + + source: "qrc:/graphics/shopBottom.png" + fillMode: Image.PreserveAspectFit + width: parent.width + } + + + background: Rectangle { + color: "transparent" + } + + +} diff --git a/qml/components/GameButton.qml b/qml/components/GameButton.qml new file mode 100644 index 0000000..4817fd7 --- /dev/null +++ b/qml/components/GameButton.qml @@ -0,0 +1,22 @@ +import QtQuick 2.9 +import QtQuick.Controls 2.4 + +Button { + id: control + + property string imageSrc: "" + + width: height + + scale: pressed ? 0.8:1 + + background: Image { + source: control.imageSrc + } + + Behavior on scale { + NumberAnimation { + duration: 100 + } + } +} diff --git a/qml/main.qml b/qml/main.qml new file mode 100644 index 0000000..050a91c --- /dev/null +++ b/qml/main.qml @@ -0,0 +1,91 @@ +import QtQuick 2.9 +import QtQuick.Window 2.2 +import QtQuick.Controls 2.4 + +import com.itsblue.qcookieclicker 1.0 + +import "./components" + +Window { + visible: true + width: 540 + height: 960 + title: "QcookieClicker" + + Page { + id: app + + property int level: settings.read("score") + + anchors.fill: parent + + AppSettings { + id: settings + } + + Label { + id: levelLa + + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + topMargin: 20 + } + + font.pixelSize: 30 + + text: app.level + } + + GameButton { + id: cookieBt + + imageSrc: "qrc:/icons/cookie.png" + + anchors.centerIn: parent + + height: parent.width * 0.6 + + onClicked: { + settings.write("score", parseInt(settings.read("score")) + 1) + app.level = settings.read("score") + } + } + + Row { + id: menuRo + + anchors { + bottom: parent.bottom + bottomMargin: parent.height * 0.025 + horizontalCenter: parent.horizontalCenter + } + + height: parent.height * 0.1 + + GameButton { + id: shopBt + + imageSrc: "qrc:/icons/shop.png" + + height: parent.height + + onClicked: { + shopPu.open() + } + } + } + + ShopPopup { + id: shopPu + + x: ( parent.width - width ) / 2 + y: ( parent.height - height ) / 2 + + width: parent.width * 0.8 + + } + + + } +} diff --git a/qml.qrc b/qml/qml.qrc similarity index 51% rename from qml.qrc rename to qml/qml.qrc index 5f6483a..44fdff8 100644 --- a/qml.qrc +++ b/qml/qml.qrc @@ -1,5 +1,7 @@ main.qml + components/GameButton.qml + ShopPopup.qml diff --git a/shared/graphics/shopBottom.png b/shared/graphics/shopBottom.png new file mode 100644 index 0000000000000000000000000000000000000000..564eb9069abec30b6fc81945cd88fd4e06df8475 GIT binary patch literal 4011 zcmeHIc{tSF9zTQ0G$G3*VKgC3i)1G>)>2ubYzdJqGO~^>Qwc>VL-wT@WGP!AuO{(E zA`xNgHKinEFNECr{bt_hd7t~<=icZ3asRtB&zw2m@A-Vc=ks08IoHfh5AmW!(EtEm z6Z+?^*!Q6<&QHTwl`hy66fi;l`0`!w!Sv;VSBhuo1Sp3 z#nEd^pE7o_-S6FJui@WT#**i!z`+&yhyI2Q4U#Q>@^ZQ10bS4H_eBJg#-t=e z-M`H_H*!DS-sGP<+T_z;YtJYVG`;%~|B=+(%s0|gSJniCFI%=CTQ{WcS~i1jj{r!SB0W_-l{e`#0D?ASKK z?JQK#{=x0arM*8gW91hlPJLx)oXKtxpQ?2xfK)>&p(YAvhy|&Yd6fH` zX$OBT^m^nFCWgwr856GHMvN8M<9gOd>ggZF<9kDG z#_Lk|0P$8e!m$IDJDTuQV*&&3Nv3{2ch zEm4)V=nf@TR;tWo<2U^ZvRw7&Npx5}M{ymxp25TGhK{ne4ZTu{PL>I_c_R8^+M~hg zvwej6;^2xTJ&l_r^Sz`{=DyJJEk@Z}uB8e*js18!j=#Ln**a?Wqs;p-yF6Zr9J%Qp z*M(+7uFnTDgK|9%;7OTw5sE4&laz1W<>!50ao?)@h*ghfw8nyAO4V$^SLvJ(Nkw| zuHJA-(ZOV&|31~y5gH{S4Z5&ASz2}yoU^KTFd0U%@ANLm&I;7+sCn%2Vm@H{qPma@ z=XH<07j}@6ANG_h#pN5D*?mP(2F^V}dKD9HzuCHHPW#f&3Z0y-i9&QyQM96x=R7V^XFc`kRVJW!jj^iF7cAf;jychGf&XVzG=E9um) zi~ct^_nK}|Lk7wLK%|uSflTT0J{=IEbX`AhBcftKU1MK7AM@g+ys- ziS0{Fim^^!sGgiLXe0?A@-#3zS{&gK$;%x*$bBHxRpCVA%?oG|O26Lc`8ijWQz2H$ zP4#gB$q{V- z=h&3HV3y<`l=y^1J=>Y&50jp2fAstih^}EMASb%>7!LE%R`*?-Gj)irQG9PxYcw+i z8%A;_n>x<#r|Exl#JbCshbtRNXsU!ve=Z(We@K`Su8njH^xHP3B2*sqQ#h-NR-C9< zA(*g+V*r1;MAPs(HhOo|jOKqcsCmu`=q+W|ETMJ~ey53MWzC)%aL~CRWjIDmn3Nk) zpNd`w8xiJIZ_gZE=3B7A`RE}7unv9mek)35YBu^Fw)F=brZ=D;f)JY8$W(F%7@HV! zk8o_}+rZt(otwghDH$8+o*)f3x}?oB|Hniw{r&JG@-~tR*P<_90rV)*mVKtDBAIs`09Eg-6Mf1W<+Uz* zZ||C*^xTj|0Fcz#`JrDA@W1#%>FIJ|qT1Yo>uUKyi*IpZ<1F(b165%zXdH<3TP^*? z2>`{FDWG(}ZwDZ6k0n45PTgB)g8I@pP#^=l4hwo%D=Umv4BpvIc#swzC&q-V7FoP$Mtf5_M*;_h7K1z!r9}BHaS`Xr3CXXPs z`*s%f2qh+$EJHXvB4pePdyYQC+=eu}WDUh60`X$V!MrM=xN|IFbtrMm z7;@wkKn2y@;8F166B*cOn?2TtfS^S^Uk^O;^=>XR1!T|gtPr$HLKPRR;0ce|sFXl$ia3=gcZLIp=B? zM--cuh(R5mkjCEdX;cP>!8um36>gbZlKI(uub`EX9uh!&oL@~xh)IBFT&5X=)8ll? zb^fKs!Bn&bhD}R_3v|MLqHt~0lI+GdP4?78dJM9-I?0$60TVu7I0%_OZ?w5Kd%@3y z3U2c@z0NOPXLfC(P6yLx*32}95i>-zn^(7j+MT??l6<;#WL>jxA#5&Yor%B|QY0*n z9E>2XPrVW)TFr|rT0_U1v24;MB`wK4Mq2$OCUUV*2uYo- zANsp~IA_9S2?B#ukjW-%ej*i5NVt0%Ci|jY5jhZ02U8+!$t(h;f1>)Rcv|WR3pGBd zjI;@)u~0&#MIeri>VCsKlo?VEu&*Io6{Jl-8w-VsD+2E9h;S4`OY+X=jc`OQl^$r{ zeqH!t1Us^|k)%Kl_)voUY!#&Xmty#8BG+|gaAavso`gco+jQR)5hR-s31?yKc{`p~ zGQ!&P=LJ8s?*ffwBmbK^asaFGi)G|^s0chy2xr;6eT}D8>pQ|cqi3GrX;ba2`wfhc zRFS06NmfzRb4(EO78Y<@=tksnOu{#plgDO!;iKEbP2tNmkL#A`^UMU3_iO8Dg*UAJ z_&)JU0?Aawn|y<+4?R_Y3=M!E9-%e{1bB*qM`l3Gs{QlyKiUysi@&+}*LM7X1TElT zn|}=GD4S Dl|rm{ literal 0 HcmV?d00001 diff --git a/shared/graphics/shopTop.png b/shared/graphics/shopTop.png new file mode 100644 index 0000000000000000000000000000000000000000..78322638c45db607582f875c2861083b0aaad031 GIT binary patch literal 13572 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 literal 0 HcmV?d00001 diff --git a/shared/icons/shop.png b/shared/icons/shop.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7a54915071448d11a883b87ddb58f150c60879 GIT binary patch literal 20289 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 literal 0 HcmV?d00001 diff --git a/shared/shared.qrc b/shared/shared.qrc index 300ac4b..ebef114 100644 --- a/shared/shared.qrc +++ b/shared/shared.qrc @@ -1,5 +1,8 @@ icons/cookie.png + icons/shop.png + graphics/shopTop.png + graphics/shopBottom.png diff --git a/shared/shop.xcf b/shared/shop.xcf new file mode 100644 index 0000000000000000000000000000000000000000..94948dbe3cec025ac716d73615acf593097d84f9 GIT binary patch literal 59807 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 literal 0 HcmV?d00001 diff --git a/sources/appsettings.cpp b/sources/appsettings.cpp new file mode 100644 index 0000000..46a781d --- /dev/null +++ b/sources/appsettings.cpp @@ -0,0 +1,90 @@ +#include "headers/appsettings.h" + +AppSettings::AppSettings(QObject* parent) + :QObject(parent) +{ + // This is the Constructor of the AppSettings class + + // get writable path to store the settings.ini file + QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + + qDebug() << "app settings path: " << path; + + // create or open the settings.ini file + this->settingsManager = new QSettings(path+"/settings.ini", QSettings::IniFormat); + + // set the values to their defaults if they haven't been created yet + this->setDefault("score", "0"); + + // create or open the settings.ini file + this->themeSettingsManager = new QSettings(":/themes/" + this->read("theme") + ".ini", QSettings::IniFormat); +} + +QString AppSettings::read(const QString &key) +{ + // function to read values from the settings file + + // open the value-group + this->settingsManager->beginGroup("AppSettings"); + // read the value + QString value = this->settingsManager->value(key , false).toString(); + // close the value-group + this->settingsManager->endGroup(); + // return the value + return(value); +} + +void AppSettings::write(const QString &key, const QVariant &value) +{ + // function to write values to the settings file + + // open the value-group + this->settingsManager->beginGroup("AppSettings"); + // write the value + this->settingsManager->setValue(key, value); + // close the value-group + this->settingsManager->endGroup(); +} + +QString AppSettings::theme(QString key) +{ + // function to get style settings from a theme file + + // open the value-group + this->themeSettingsManager->beginGroup("ClickGameTheme"); + // read the value + QString value = this->themeSettingsManager->value(key , false).toString(); + // close the value-group + this->themeSettingsManager->endGroup(); + // return the value + return(value); +} + +void AppSettings::setDefault(const QString &key, const QVariant &defaultValue) +{ + // function to create a key (/ setting) with a default value if it hasnt been ceated yet + + // read the current value + QString value = this->read(key); + if(value == "false"){ + // if it is nor defined yet, the read function will return "false" (as a string) + // -> if that is the case -> create the key with the default value + this->write(key, defaultValue); + } + +} + +void AppSettings::reloadTheme() +{ + delete this->themeSettingsManager; + this->themeSettingsManager = new QSettings(":/themes/" + this->read("theme") + ".ini", QSettings::IniFormat); + emit this->themeChanged(); +} + +AppSettings::~AppSettings() +{ + // This is the Destructor of the AppSettings class + + // delete the settings manager + delete settingsManager; +} diff --git a/main.cpp b/sources/main.cpp similarity index 75% rename from main.cpp rename to sources/main.cpp index 6333b85..144a8df 100644 --- a/main.cpp +++ b/sources/main.cpp @@ -1,12 +1,16 @@ #include #include +#include "headers/appsettings.h" + int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); + qmlRegisterType("com.itsblue.qcookieclicker", 1, 0, "AppSettings"); + QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty())