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 el tipus 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
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include <QUrl>
#include <KLocalizedContext>
#include <KLocalizedString>

int main(int argc, char *argv[])
{
    QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);
    KLocalizedString::setApplicationDomain("helloworld");
    QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
    QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
    QCoreApplication::setApplicationName(QStringLiteral("Hello World"));

    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.

Introduïu la nostra funció principal. La seva primera línia QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); habilita l’escalat en PPP alt. Això permet que la nostra aplicació escali correctament en dispositius amb diferents densitats de píxels a la pantalla.

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

També establim algunes metadades relacionades amb l’aplicació. Aquests inclouen l’organització que va crear l’aplicació, el lloc web de l’organització i el nom de l’aplicació. Configurem aquestes propietats en la QCoreApplication, un objecte que 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).

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 al nostre fitxer 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().