Descubriendo main.cpp

Entendiendo el archivo central de nuestro código de motor

El papel de main.cpp

Mientras que QML se usa para la interfaz de las aplicaciones de Kirigami, el motor se suele escribir en C++ gracias a la velocidad y flexibilidad de este lenguaje. Si bien en las páginas anteriores hemos cubierto QML con mucha profundidad, necesitaremos comprender nuestro código C++ del motor para crear aplicaciones que sean más útiles de lo que podemos lograr con QML puro.

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.

Lo que hace

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

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.

A continuación creamos una instancia de una QApplication que llamaremos app. En esta llamada es necesario pasar argc y argv al constructor.

También definimos varios metadatos relacionados con la aplicación. Entre ellos, la organización que ha creado la aplicación, la página web de esta organización y el nombre de la aplicación. Definimos estas propiedades llamando a QApplication , creando una instancia de un objeto que viene de QCoreApplication y que proporciona el bucle de eventos de las aplicaciones, sin importar si disponen de una interfaz gráfica de usuario o no (de modo que si ejecutamos nuestro programa sin interfaz de usuario, estos metadatos también se definirían).

To make our app look good with KDE's Breeze icons and Breeze style on non-Plasma environments such as Windows or GNOME, we need to do three things:

The call to KIconTheme::initTheme() needs to be done before creating the QApplication and lets the app find Breeze icons to use. Setting the QStyle to Breeze is needed because we used QApplication for our app instead of QGuiApplication . Actual interface controls in the window like buttons and checkboxes will follow Breeze by using qqc2-desktop-style.

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.

Seguidamente, nos aseguramos de que nuestro motor ha cargado correctamente el archivo QML comprobando que la lista rootObjects() del motor no está vacía. En tal caso podemos ejecutar nuestra aplicación con app.exec() .