Investigar o main.cpp

Compreender o ficheiro central do nosso código de infra-estrutura

O papel do main.cpp

Embora o QML seja usado para a interface das aplicações do Kirigami, a infra-estrutura normalmente é feita em C++, graças à velocidade e flexibilidade desta linguagem. Embora nas páginas anteriores tenhamos feito uma análise profunda do QML, teremos de ganhar alguma compreensão do nosso código de C++ da infra-estrutura, para criar aplicações que são mais úteis que as que conseguimos com 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.

O que faz

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

Em primeiro lugar, devemos incluir um conjunto de ficheiros de inclusão do Qt que nos permite usar as funções do mesmo. Neste casos, iremos incluir um conjunto de ficheiros de inclusão do Qt que lidam com a lógica aplicacional, a leitura de ficheiros QML e o acesso aos ficheiros definidos no resources.qrc.

Iremos então criar uma instância de QApplication que será chamada de app. Iremos passar o 'argc' e o 'argv' ao construtor aqui, permitindo ao Qt processar e usar os argumentos.

Também definimos alguns meta-dados relacionados com a aplicação. Estes incluem a organização que criou a aplicação, a página Web da organização e o nome da aplicação. Definimos estas propriedades no QApplication , um objecto que herda do QCoreApplication e que fornece o ciclo de eventos das aplicações, independentemente se têm uma interface gráfica ou não (por isso, se executarmos o nosso programa sem essa interface, estes meta-dados ficarão definidos à mesma).

To make our app look native on Plasma, Windows or GNOME, we use QQuickStyle::setStyle() to make use of qqc2-desktop-style.

O QQmlApplicationEngine permite-nos carregar uma aplicação a partir de um ficheiro QML, o que será feito na linha seguinte. Em engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); iremos carregar o nosso QML a partir de um URL no nosso Ficheiros de Recursos do Qt (resources.qrc).

De seguida iremos verificar se o nosso motor carregou correctamente o ficheiro QML, verificando se a lista rootObjects() do motor não está vazia. Nesse caso, poderemos executar a nossa aplicação com o app.exec() .