Förstå sig på main.cpp

Förstå den centrala filen i vår gränssnittskod

Rollen som main.cpp har

Medan QML används för förgrunden i Kirigami-program, är bakgrundskoden oftast skriven i C++ tack vare språkets snabbhet och flexibilitet. Medan vi har täckt QML på djupet på de tidigare sidorna, behöver vi förstå vår C++ bakgrundskod för att kunna skapa program som är användbarare än vad vi kan åstadkomma med ren QML.

Här går vi igenom filen main.cpp vi skapade på sidan Komma igång så att vi bättre förstår vad som händer i programmets centrala C++ fil. Även om det är en grundläggande main.cpp, förblir funktionerna vi går igenom väsentliga oberoende av vilket sorts program du bestämmer dig för att skapa.

Vad den gör

 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();
}

Först måste vi inkludera ett antal Qt deklarationsfiler, vilket låter oss använda deras funktioner. I detta fall, inkluderade vi ett antal Qt deklarationsfiler som hanterar programlogik, läser QML-filer och kommer åt filer definierade i resources.qrc.

Därefter skapar vi en instans av QApplication , som vi kallar app. Vi skickar sedan argc och argv till konstruktorn, och låter Qt tolka och använda argumenten.

Vi anger också in en del metadata för programmet. De inkluderar organisationen som skapade programmet, organisationens webbplats och namnet på programmet. Vi anger egenskaperna genom att anropa QApplication , för att instansiera ett objekt som kommer från QCoreApplication och som tillhandahåller händelseslingan för program oavsett om de har ett grafiskt användargränssnitt eller inte (så om vi körde vårt program utan grafiskt användargränssnitt, skulle metadata fortfarande användas).

För att få vårt program att se ut att höra hemma på Plasma, Windows eller GNOME använder vi QQuickStyle::setStyle() för att utnyttja qqc2-desktop-style.

QQmlApplicationEngine låter oss ladda ett program från en QML-fil, vilket vi gör på nästa rad. Med engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); läser vi in vår QML från en webbadress i vår Qt-resursfil (resources.qrc).

Därefter kontrollerar vi om vårt gränssnitt har läst in QML-filen riktigt genom att kontrollera att gränssnittets lista rootObjects() inte är tom. Vi kan därefter köra vårt program med app.exec() .