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 kian aplikaĵon 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
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();
}

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 kaj permesas al ni legi QML-dosierojn.

Ni tiam kreas instancon de QApplication, kiun ni nomas app. Transdono de argc kaj argv al la konstruilo estas postulata por la voko.

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 aplikaĵo aspektu bone kun la Breeze-piktogramoj kaj Breeze-stilo de KDE sur ne-Plasmaj medioj kiel Vindozo aŭ GNOME, ni devas fari tri aferojn:

La alvoko al KIconTheme::initTheme() devas esti farita antaŭ ol krei la QApplication kaj lasas la apon trovi Breeze-piktogramojn por uzi. Agordi la QStyle al Breeze estas necesa ĉar ni uzis QApplication por nia programo anstataŭ QGuiApplication. Faktaj interfacaj regiloj en la fenestro kiel butonoj kaj markokestoj sekvos Breeze uzante 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().