Skip to main content
Ir para o conteúdo

Descobrindo o main.cpp

Compreendendo o arquivo central do nosso código de backend

O papel do main.cpp

Embora o QML seja usado para o front-end de aplicativos Kirigami, o back-end é geralmente escrito em C++, graças à velocidade e flexibilidade dessa linguagem. Embora nas páginas anteriores tenhamos abordado o QML com bastante profundidade, precisaremos obter uma compreensão do nosso código C++ de back-end para criar aplicativos que sejam mais úteis do que o que podemos alcançar com QML puro.

Aqui, revisaremos o arquivo main.cpp que criamos na página Introdução para que possamos entender melhor o que está acontecendo no arquivo C++ central do nosso aplicativo. Embora este seja um main.cpp básico, os recursos que abordaremos permanecerão essenciais, independentemente do tipo de aplicativo que você decidir criar.

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

Primeiro, precisamos incluir uma série de arquivos de cabeçalho do Qt, permitindo-nos usar suas funções. Neste caso, incluímos uma série de cabeçalhos do Qt que lidam com a lógica da aplicação e que nos permitem ler arquivos QML.

Em seguida, criamos uma instância de QApplication que chamamos de app. Passar argc e argv para o construtor é necessário para a chamada.

Também definimos alguns metadados relacionados ao aplicativo. Estes incluem a organização que criou o aplicativo, o site da organização e o nome do aplicativo. Definimos essas propriedades chamando QApplication, instanciando um objeto que vem de QCoreApplication e fornece o loop de eventos para aplicativos, independentemente de terem ou não uma interface gráfica (GUI) (portanto, se executássemos nosso programa sem a GUI, esses metadados ainda seriam definidos).

Para que nosso aplicativo tenha uma boa aparência com os ícones Breeze e o estilo Breeze do KDE em ambientes que não sejam Plasma, como Windows ou GNOME, precisamos fazer três coisas:

A chamada para KIconTheme::initTheme() precisa ser feita antes da criação do QApplication e permite que o aplicativo encontre os ícones do Breeze para usar. Definir o QStyle para Breeze é necessário porque usamos QApplication para nosso aplicativo em vez de QGuiApplication. Os controles de interface reais na janela, como botões e caixas de seleção, seguirão o Breeze usando qqc2-desktop-style.

O QQmlApplicationEngine nos permite carregar um aplicativo a partir de um arquivo QML, o que faremos na próxima linha. Em engine.loadFromModule("org.kde.tutorial", "Main");, carregamos nosso QML a partir da importação URI definida no CMake.

Em seguida, verificamos se nosso mecanismo carregou corretamente o arquivo QML, verificando se a lista rootObjects() do mecanismo não está vazia. Podemos então executar nossa aplicação com app.exec().