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.

Aqui iremos passar pelo ficheiro main.cpp que criámos na página de 'Introdução', para que possamos compreender melhor o que se passa no ficheiro C++ central da nossa aplicação. Embora este seja um ficheiro main.cpp básico, as funcionalidades que iremos ver continuarão essenciais, independentemente do tipo de aplicação que decida criar.

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

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.

Entremos na nossa função principal. A sua primeira linha QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); activa o ajuste de escala para PPP's elevados. Isto permite que a nossa aplicação ajuste a sua escala de forma adequada pelos dispositivos com várias densidades de pixels do ecrã.

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 destinados a afectar o Qt.

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 QCoreApplication, um objecto 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).

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 ficheiro 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().