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 preučili datoteko main.cpp, ki smo jo ustvarili na strani Getting Started, da bomo lahko bolje razumeli, kaj se dogaja v osrednjo datoteko C++ naše aplikacije. Čeprav je to osnovni main.cpp, bodo ostale bistvene zmožnosti, ki jih bomo pregledali, 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
28
29
30
31
32
33
34
35
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include <QUrl>
#include <QQuickStyle>
#include <KLocalizedContext>
#include <KLocalizedString>
#include <KIconTheme>

int main(int argc, char *argv[])
{
    KIconTheme::initTheme();
    QApplication app(argc, argv);
    KLocalizedString::setApplicationDomain("tutorial");
    QApplication::setOrganizationName(QStringLiteral("KDE"));
    QApplication::setOrganizationDomain(QStringLiteral("kde.org"));
    QApplication::setApplicationName(QStringLiteral("Kirigami Tutorial"));
    QApplication::setDesktopFileName(QStringLiteral("org.kde.tutorial"));

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

    QQmlApplicationEngine engine;

    engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
    engine.loadFromModule("org.kde.tutorial", "Main");

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

    return app.exec();
}

Najprej moramo vključiti številne datoteke glav Qt header files, ki nam omogočajo uporabo njihovih funkcij. V tem primeru vključujemo številne glave Qt, ki obravnavajo logiko aplikacij, branje datotek QML.

Nato ustvarimo pojavek QApplication , ki ga imenujemo aplikacija app. Prenos argc in argv, konstruktorju je zahtevan za klic.

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 tako, da pokličemo QApplication , instanciramo objekt, ki prihaja iz QCoreApplication in zagotovimo dogodkovno zanko za aplikacije ne glede na to, ali imajo GUI ali ne (torej, če bi izvajali naš program brez GUI, bi bili ti metapodatki še vedno nastavljeni).

Da bo naša aplikacija videti dobro z ikonami Sapice in slogom Sapice KDE na okoljih, ki niso Plasma, kot sta Windows ali GNOME, moramo narediti tri stvari:

Klic KIconTheme::initTheme() je treba opraviti pred ustvarjanjem QApplication in aplikaciji omogoči najti ikone Sapice za uporabo. Nastavitev QStyle na Breeze je potrebna, ker smo za našo aplikacijo uporabili QApplication namesto QGuiApplication . Dejanski kontrolniki vmesnika v oknu, kot so gumbi in potrditvena polja, bodo sledili Sapici z uporabo qqc2-desktop-style.

QQmlApplicationEngine nam omogoča nalaganje aplikacije iz datoteke QML, kar storimo v naslednji vrstici. V engine.loadFromModule("org.kde.tutorial", "Main"); naložimo naš QML iz uvoza URI, definiranega v CMake.

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