Bekijken wat main.cpp doet

Het centrale bestand van onze backend-code begrijpen

De rol van main.cpp

Terwijl QML gebruikt wordt voor de front-end van Kirigami toepassingen, wordt de backend gewoonlijk in C++ geschreven vanwege de snelheid en flexibiliteit van deze taal. Terwijl in vorige pagina's we QML behoorlijk in de diepte hebben gedekt, moeten we enig begrip krijgen van de C++ code van onze backend om toepassingen te maken die nuttiger zijn dan wat we kunnen bereiken met pure QML.

Hier gaan we het hebben over het bestand main.cpp dat we hebben gemaakt in de pagina Beginnen zodat we beter begrijpen wat er gaande is in het centrale C++ bestand van onze toepassing. Terwijl dit een basis main.cpp is, blijven de functies die we bespreken essentieel ongeacht het soort toepassing dat u beslist te maken.

Wat het doet

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include <QUrl>
#include <QQuickStyle>
#include <KLocalizedContext>
#include <KLocalizedString>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    KLocalizedString::setApplicationDomain("helloworld");
    QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
    QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
    QCoreApplication::setApplicationName(QStringLiteral("Hello World"));

    if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) {
        QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));
    }

    QQmlApplicationEngine engine;

    engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    if (engine.rootObjects().isEmpty()) {
        return -1;
    }

    return app.exec();
}

Ten eerste moeten we een aantal Qt header-bestanden invoegen, waarmee we hun functies kunnen gebruiken. In dit geval voegen we een aantal Qt headers in die toepassingslogica behandelen, lezen van QML bestanden en toegang tot bestanden gedefinieerd in resources.qrc.

Daarna maken we een QApplication exemplaar die we app noemen. We geven argc en argv door aan de constructor, laten Qt argumenten ontleden en gebruiken.

We stellen ook enige metagegevens in gerelateerd aan de toepassing. Dit omvat de organisatie die de toepassing maakt, de website van de organisatie en de naam van de toepassing. We stellen deze eigenschappen in door QCoreApplication aan te roepen, waarmee een object wordt gemaakt dat komt van QCoreApplication en de event loop levert voor toepassingen ongeacht of ze een GUI hebben of niet (dus als we ons programma zonder GUI uitvoeren, dan zouden deze metagegevens nog steeds zijn ingesteld).

Om onze toepassing inheems te laten lijken op Plasma, Windows of GNOME gebruiken we QQuickStyle::setStyle() om gebruik te maken van qqc2-desktop-style.

De QQmlApplicationEngine ) laat ons een toepassing laden uit een QML-bestand, wat we in de volgende regel doen. In engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); laden we onze QML uit een URL in ons Qt hulpbronbestand (resources.qrc).

Vervolgens controleren we of onze engine juist het QML-bestand geladen heeft door te controleren dat de rootObjects() -lijst van de engine niet leeg is. Daarna kunnen we onze toepassing uitvoeren met app.exec() .