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.

Here, we'll be going over the main.cpp file we created in the Getting Started page so that we can better understand what is going on in the central C++ file of our application. While this is a basic main.cpp, the features we will go over will remain essential no matter what kind of application you decide to create.

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
#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("tutorial");
    QApplication::setOrganizationName(QStringLiteral("KDE"));
    QApplication::setOrganizationDomain(QStringLiteral("kde.org"));
    QApplication::setApplicationName(QStringLiteral("Kirigami Tutorial"));
    QApplication::setDesktopFileName(QStringLiteral("org.kde.tutorial"));

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

First we must include a number of Qt header files, allowing us to use their functions. In this case, we include a number of Qt headers that handle application logic, and to allow us to read QML files.

We then create a QApplication instance which we call app. Passing argc and argv to the constructor is required for the call.

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).

To make our app look native on non-Plasma environments such as Windows or GNOME, we use QQuickStyle::setStyle() to make use of qqc2-desktop-style, forcing the use of Breeze.

The QQmlApplicationEngine lets us load an application from a QML file, which we do in the next line. In engine.loadFromModule("org.kde.tutorial", "Main"); we load our QML from the URI import defined in CMake.

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() .