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

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.

Här kommer vår main-funktion. Dess första radQGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); aktiverar skalning med hög upplösning. Det låter vårt program skalas riktigt på olika apparater med olika bildpunktstäthet på skärmen.

Därefter skapar vi en instans av QApplication, som vi kallar app. Vi skickar argc och argv till konstruktorn här, och låter Qt tolka och använda väljare avsedda att påverka Qt.

Vi anger också en del metadata som hör till programmet. De omfattar organisationen som skapat programmet, organisationens webbplats och programmets namn. Vi anger egenskaperna i QCoreApplication, ett objekt som tillhandahåller händelsesnurran för program oberoende av om de har ett grafiskt användargränssnitt eller inte (så om vi körde vårt program utan det grafiska användargränssnittet, skulle metadata ändå anges).

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 resources.qrc-fil.

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