Preučevanje main.cpp

Razumevanje osrednje datoteke naše zaledne kode

Vloga main.cpp

Medtem ko se QML uporablja za vmesnik aplikacij Kirigami, je zaledje običajno napisano v C++ zaradi hitrosti in prilagodljivosti tega jezika. Medtem ko smo na prejšnjih straneh podrobno razložili QML, bomo potrebno pridobiti še razumevanje naše zaledne kode C++, da bi lahko ustvarjali aplikacije, ki so bolj uporabne od tega, kar lahko dosežemo s čistim QML.

Tukaj bomo preiskali datoteko »main.cpp«, ki smo jo ustvarili na strani »Prvi koraki«, da bomo bolje razumeli, kaj se dogaja v osrednji datoteki C++ naše aplikacije. Čeprav gre za osnovni »main.cpp«, bodo funkcije, ki jih bomo pregledali, ostale bistvene ne glede na to, kakšno aplikacijo boste ustvarili.

Kaj počne

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

Najprej moramo vključiti številne datoteke glav Qt, ki nam omogočajo uporabo njihovih funkcij. V tem primeru vključujemo številne glave Qt, ki obravnavajo logiko aplikacij, branje datotek QML in dostop do datotek, opredeljenih v »resources.qrc«.

Vnesite našo glavno funkcijo. Njena prva vrstica QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); omogoča umerjanje visokega DPI. Tako lahko naša aplikacija pravilno spreminja velikost na napravah z različnimi gostotami slikovnih točk na zaslonu.

Nato ustvarimo primerek QApplication, ki ga imenujemo »aplikacija« (»app«). Tukaj prepustimo »argc« in »argv« konstruktorju, prepustimo razčlenjevanje Qt in uporabimo argumente, ki naj bi vplivali na Qt.

Nastavili smo tudi nekaj metapodatkov, ki se nanašajo na aplikacijo. Ti vključujejo organizacijo, ki je ustvarila aplikacijo, spletno stran organizacije in ime aplikacije. Te lastnosti nastavimo v QCoreApplication, predmetu, ki omogoča zanko dogodka za aplikacije ne glede na to, ali imajo uporabniški vmesnik ali ne (torej, če bi zaganjali naš program brez uporabniškega vmesnika, bi bili ti metapodatki vseeno nastavljeni).

QQmlApplicationEngine nam dovoli naložiti aplikacijo iz datoteke QML, kar storimo v naslednji vrstici. V engine.load(QUrl(QStringLiteral("qrc:/main.qml«))); nalagamo QML iz URL-ja v datoteko »resources.qrc«.

Nato preverimo, ali je naš mehanizem pravilno naložil datoteko QML, tako da preverimo, da seznam »rootObjects« mehanizma ni prazen. Nato lahko zaženemo aplikacijo z »app.exec()«.