Comprendre le fichier « main.cpp »

Comprendre le fichier principal pour notre code de moteur.

Le rôle de « main.cpp »

Alors que QML est utilisé pour l'interface utilisateur des applications avec Kirigami, le moteur est généralement écrit en C++, grâce à sa vitesse et à sa flexibilité. Bien que dans les pages précédentes, nous ayons parcouru QML de manière très approfondie, nous aurons besoin de mieux comprendre le code C++ de notre moteur afin de créer des applications plus utiles que ce que nous pouvons réaliser avec du QML pur.

Nous allons examiner, ici, le fichier « main.cpp » que nous avons créé dans la page « Pour commencer », afin de mieux comprendre ce qui se passe dans le fichier C++, au centre de notre application. Bien qu'il s'agisse d'un « main.cpp » standard, les fonctionnalités que nous allons aborder resteront essentielles quel que soit le type d'application que vous décidez de créer.

Ce que cela fait

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

Tout d'abord, nous devons inclure un certain nombre de fichiers d'en-tête Qt, nous permettant d'utiliser leurs fonctions. Dans ce cas, nous incluons un certain nombre d'en-têtes Qt gérant la logique de l'application, la lecture des fichiers QML et l'accès aux fichiers définis dans « resources.qrc ».

Regardons notre fonction principale. Sa première ligne « QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling) ; » permet d'activer la mise à l'échelle en haute résolution. Cela indique à notre application de se mettre à l'échelle correctement sur des appareils ayant des affichages avec différentes densités de pixels.

Nous créons ensuite une instance de « QApplication » que nous appelons « app ». Nous passons les paramètres « argc » et « argv » au constructeur ici, laissant Qt analyser et utiliser les arguments destinés à l'affecter.

Nous définissons également certaines métadonnées relatives à l'application. Celles-ci concernent l'organisation ayant créé l'application, le site Internet de l'organisation et le nom de l'application. le nom de l'application. Nous définissons ces propriétés dans « QCoreApplication », un objet fournissant la boucle d'évènements pour les applications, qu'elles aient ou non une interface graphique (donc si nous exécutons notre programme sans interface graphique utilisateur, les métadonnées seraient toujours définies).

L'objet « QQmlApplicationEngine » nous permet de charger une application à partir d'un fichier « QML », ce que nous faisons à la ligne suivante. Avec « engine.load(QUrl(QStringLiteral("qrc:/main.qml"))) ; », nous chargeons notre « QML » à partir d'une URL dans notre fichier « resources.qrc ».

Ensuite, nous vérifions si notre moteur a correctement chargé le fichier QML en vérifiant que la liste « rootObjects » du moteur n'est pas vide. Nous pouvons alors exécuter notre application avec « app.exec() ».