Розбираємося у 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
#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();
}

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

Введемо нашу основну функцію. Його перший рядок QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); вмикає масштабування із високою роздільністю. Це надає нашій програмі належним чином масштабувати вікно на усіх пристроях із різними густинами пікселів на дисплеях.

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

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

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

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