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 wat het soort toepassing is dat u beslist om 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
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include <QUrl>
#include <KLocalizedContext>
#include <KLocalizedString>

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

    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.

Voer onze hoofdfunctie in. De eerste regel QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); schakelt schalen met hoge DPI in. Dit laat onze toepassing op de juiste manier schalen over apparaten met verschillende pixeldichtheden van schermen.

Daarna maken we een QApplication exemplaar die we app noemen. We geven argc en argv door aan de constructor hier, laten Qt argumenten ontleden en gebruiken bedoelt om effect te hebben op Qt.

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 in QCoreApplication, een object dat de gebeurtenislus voor toepassingen levert ongeacht of ze een GUI hebben of niet (dus als we ons programma zonder GUI uitvoeren, dan zouden deze metagegevens nog steeds zijn ingesteld).

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 bestand 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().