Розбираємося у main.cpp

Розбираємося із центральним файлом нашого коду модуля обробки

Роль main.cpp

Хоча для оболонок програм на основі Kirigami використовується QML, модулі обробки, зазвичай, пишуть мовою C++ через її швидкість та гнучкість. На попередніх сторінках ми доволі докладно розбиралися із кодом QML, а тепер нам треба розібратися із кодом мовою C++ нашого модуля обробки, щоб зробити програми кориснішими за ті, які ми могли б написати, використовуючи лише QML.

У цьому розділі ми вивчимо файл main.cpp, який було створено на сторінці Вступ з метою удосконалення знань щодо того, що відбувається у центральному файлі мовою C++ нашої програми. Хоча це базовий варіант main.cpp, можливості, які ми вивчатимемо, лишатимуться характерними для будь-яких програм, які ви створюватимете.

Призначення

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

Спочатку нам слід включити декілька файлів заголовків Qt, за допомогою яких ми зможемо скористатися відповідними функціями. У нашому випадку ми включимо заголовки Qt, які пов'язано із обробкою логіки програми, читанням файлів QML і доступом до файлів, які визначено у resources.qrc.

Далі, ми створюємо екземпляр QApplication , який ми назвемо app. Тут ми передаємо argc і argv конструктору, дозволяючи Qt обробляти і використовувати аргументи, які мають значення для Qt.

Ми також встановимо значення деяких метаданих, пов'язаних із програмою. Серед цих даних організація, якою створено програму, сайт організації та назва програми. Ми встановлюємо значення цих властивостей викликом QApplication , створенням екземпляра об'єкта, який походить від QCoreApplication і забезпечує роботу циклу обробки подій для програм, незалежно від того, мають ці програми графічний інтерфейс чи ні (отже, якщо ми запустимо нашу програму без графічного інтерфейсу, значення для цих метаданих все одно буде встановлено).

Щоб наша програма виглядала природно у Плазмі, Windows або GNOME, нам слід наказати за допомогою QQuickStyle::setStyle() використовувати qqc2-desktop-style.

QQmlApplicationEngine надає нам можливість завантажувати програму з файла QML, що ми і робимо у наступному рядку. У engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); ми завантажуємо нашу QML з адреси у нашому файлі ресурсів Qt (resources.qrc).

Далі, ми перевіримо, чи наш рушій належним чином завантажив файл QML, перевіривши, чи список rootObjects() рушія є порожнім. Далі, ми можемо запустити нашу програму за допомогою app.exec() .