Descobrir el main.cpp

Comprenent el fitxer central del nostre codi de dorsal

El paper de main.cpp

Si bé el QML s'utilitza per al frontal de les aplicacions escrites amb el Kirigami, el dorsal generalment s'escriu en C++ gràcies a la velocitat i flexibilitat d'aquest llenguatge. Si bé en les pàgines anteriors hem cobert el QML amb molta profunditat, necessitarem comprendre el nostre codi en C++ del dorsal per a crear aplicacions que siguin més útils del que podem aconseguir amb un QML pur.

Aquí, repassarem el fitxer main.cpp que hem creat a la pàgina Com començar perquè puguem comprendre millor el que està succeint en el fitxer central de C++ de la nostra aplicació. Si bé aquest és un main.cpp bàsic, les característiques que repassarem seguiran sent essencials, sense importar la classe d'aplicació que decidiu crear.

Què és el que fa

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

Primer hem d'incloure una sèrie de fitxers de capçalera de les Qt, i això ens permetrà utilitzar les seves funcions. En aquest cas, incloem una sèrie de capçaleres de les Qt que manegen la lògica de l'aplicació, llegeixen els fitxers en QML i accedeixen als fitxers definits en el resources.qrc.

Després creem una instància QApplication a la que anomenarem app. Aquí passem argc i argv al constructor, deixant que les Qt analitzin i utilitzin arguments.

També establim algunes metadades relacionades amb l'aplicació. Aquestes inclouen l'organització que va crear l'aplicació, el lloc web de l'organització i el nom de l'aplicació. Configurem aquestes propietats en el QApplication , un objecte que ve de QCoreApplication i proporciona el bucle d'esdeveniments per a les aplicacions, independentment de si tenen una IGU o no (pel que si executem el nostre programa sense la IGU, aquestes metadades encara s'establiran).

Per a fer que la nostra aplicació sembli nativa al Plasma, Windows o GNOME, utilitzem QQuickStyle::setStyle() per a fer ús de qqc2-desktop-style.

El QQmlApplicationEngine permet carregar una aplicació des d'un fitxer QML, el qual fem en la línia següent. A engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); carreguem el nostre QML des d'un URL en el nostre Qt Resource File (resources.qrc).

A continuació, comprovem si el nostre motor ha carregat correctament el fitxer QML comprovant que la llista rootObjects() del motor no està buida. Després podem executar la nostra aplicació amb app.exec() .