Eltrovante main.cpp

Kompreni la centran dosieron de nia backend-kodo

La rolo de main.cpp

Dum QML estas uzata por la fronto de Kirigami-aplikoj, la malantaŭo estas kutime skribita en C++ danke al la rapideco kaj fleksebleco de ĉi tiu lingvo. Dum en antaŭaj paĝoj ni multe profunde kovris QML, ni devos akiri komprenon pri nia malantaŭa C++-kodo por fari aplikojn kiuj estas pli utilaj ol tio, kion ni povas atingi per pura QML.

Ĉi tie, ni trarigardos la main.cpp-dosieron, kiun ni kreis en la paĝo Getting Started por ke ni povu pli bone kompreni kio okazas. en la centra C++-dosiero de nia aplikaĵo. Kvankam ĉi tio estas baza main.cpp, la funkcioj, kiujn ni trarigardos, restos esencaj, negrave kia aplikaĵo vi decidas krei.

Kion ĝi faras

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

Unue ni devas inkluzivi kelkajn Qt header files, permesante al ni uzi iliajn funkciojn. En ĉi tiu kazo, ni inkluzivas kelkajn Qt-kapojn kiuj pritraktas aplikaĵlogikon, legante QML-dosierojn kaj alirante dosierojn difinitajn en resources.qrc.

Ni tiam kreas QApplication petskribon, kiun ni nomas app. Ni tiam transdonas argc kaj argv al la konstrukciisto, lasante Qt analizi kaj uzi argumentojn.

Ni ankaŭ fiksas kelkajn metadatumojn rilate al la aplikaĵo. Ĉi tiuj inkluzivas la organizon kiu kreis la aplikaĵon, la retejon de la organizo kaj la nomon de la aplikaĵo. Ni agordas ĉi tiujn trajtojn vokante QApplication , instantiigante objekton kiu venas de QCoreApplication kaj provizas la okazaĵbuklon por aplikoj sendepende de ĉu ili havas GUI aŭ ne (do se ni ruligus nian programon sen la GUI, ĉi tiuj metadatenoj ankoraŭ estus fiksitaj).

Por ke nia programo aspektu indiĝena sur Plasma, Vindozo aŭ GNOME, ni uzas QQuickStyle::setStyle() por uzi qqc2-desktop-style. /invent.kde.org/frameworks/qqc2-desktop-style).

La QQmlApplicationEngine permesas al ni ŝargi aplikaĵon el QML-dosiero, kion ni faras en la sekva linio. En engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); ni ŝargas nian QML de URL en nia [Qt Resource File](https://doc.qt.io/ qt-6/resources.html) (resources.qrc).

Poste, ni kontrolas ĉu nia motoro ĝuste ŝargis la QML-dosieron kontrolante ke la listo de rootObjects() de la motoro ne estas malplena. Ni povas tiam ruli nian aplikaĵon per app.exec() .