Сторінка «Про програму»

Відомості щодо вашої програми

Сторінка «Про програму» надає вам змогу показувати дані щодо авторських прав на програму, список учасників розробки та деякі відомості щодо того, на якій платформі запущено програму.

Спочатку, ми створимо два файли у каталозі src/, а саме about.cpp і about.h.

about.h

#pragma once

#include <QObject>
#include <KAboutData>

class AboutType : public QObject
{
    Q_OBJECT
    Q_PROPERTY(KAboutData aboutData READ aboutData CONSTANT)
public:
    [[nodiscard]] KAboutData aboutData() const
    {
        return KAboutData::applicationData();
    }
};

У файлі .h ми створюємо цей клас aboutType, який успадковує властивості від QObject.

Макрос Q_OBJECT повідомляє компілятору, що цей клас використовує власні сигнали і слоти, макрос Q_PROPERTY поводиться як учасник даних класу, але має додаткові властивості — він уможливить для нашого коду QML доступ до цього класу.

Метод aboutData повертатиме дані програми з KAboutData.

about.cpp

#include "about.h"

У файлі .cpp ми просто включаємо файл .h.

main.cpp

...
#include <KAboutData>
#include "config-helloworld.h"

#include "about.h"

int main(int argc, char *argv[])
{
    ...

    KAboutData aboutData(
                         // Внутрішній варіант назви програми.
                         QStringLiteral("helloworld"),
                         // Показаний рядок назви програми.
                         i18nc("@title", "Hello World"),
                         // Рядок версії програми.
                         QStringLiteral(HELLOWORLD_VERSION_STRING),
                         // Короткий опис призначення програми.
                         i18n("Hello world application"),
                         // Умови ліцензування випущеного коду.
                         KAboutLicense::GPL,
                         // Відомості щодо авторських прав.
                         i18n("(c) 2021"));
    aboutData.addAuthor(i18nc("@info:credit", "Your name"), i18nc("@info:credit", "Author Role"), QStringLiteral("your@email.com"), QStringLiteral("https://yourwebsite.com"));
    KAboutData::setApplicationData(aboutData);

    QQmlApplicationEngine engine;

    qmlRegisterSingletonType<AboutType>("org.kde.helloworld", 1, 0, "AboutType", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
        Q_UNUSED(engine)
        Q_UNUSED(scriptEngine)

        return new AboutType();
    });
    ...
}

У файлі cpp ми включаємо KAboutData і файл .h, який щойно створили, KAboutData є основним компонентом KDE Frameworks, який зберігає відомості щодо програми, які згодом можна повторно використати у багатьох інших компонентах KDE Frameworks. Ми створюємо екземпляр нового об'єкта KAboutData із його очевидно повним типовим конструктором та додаємо дані щодо авторства.

Ми також включаємо цей файл config-helloworld.h, який надає нам цю змінну HELLOWORLD_VERSION_STRING, значення якої ми встановимо пізніше у цьому розділі підручника.

Після встановлення усіх потрібних відомостей ми викликаємо KAboutData::setApplicationData для ініціалізації властивостей об'єкта QApplication.

Після визначення рушія QML ми створюємо qmlRegisterSingletonType. Першим аргументом є адреса, на базовому рівні назва пакунка, другим і третім аргументами є основна і проміжна версії, відповідно, четвертим аргументом є назва типу, назва, яку ми викликатимемо при доступі до методів AboutType.

У лямбді qmlRegisterSingletonType ми просто повертаємо новий об'єкт AboutType;

main.qml

...
import org.kde.helloworld 1.0

Kirigami.ApplicationWindow {
    ...

    globalDrawer: Kirigami.GlobalDrawer {
        ...
        actions: [
            ...
            Kirigami.Action {
                text: i18n("About")
                icon.name: "help-about"
                onTriggered: pageStack.layers.push(aboutPage)
            }
            ...
        ]
    }

    Component {
        id: aboutPage

        Kirigami.AboutPage {
            aboutData: AboutType.aboutData
        }
    }
}

Спершу ми імпортуємо пакунок, який ми визначили у файлі main.cpp, додаємо Kirigami.Action на нашу загальну висувну панель. Відповідна кнопка надаватиме нам змогу переходити на сторінку «Про програму». Створюємо на загальній панелі компонент з Kirigami.AboutPage на ньому. Сторінка «Про програму» матиме лише одну властивість — aboutData. Далі, ми передамо цій властивості значення Conrtoller.aboutData.

CMakeLists

...
project(helloworld)
set(PROJECT_VERSION "1.0")

...
include(ECMSetupVersion)
include(ECMGenerateHeaders)
include(ECMPoQmTools)
...

ecm_setup_version(${PROJECT_VERSION}
    VARIABLE_PREFIX HELLOWORLD
    VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/src/config-helloworld.h"
)

...
find_package(KF5 ${KF_MIN_VERSION} ... CoreAddons)
...

У файлі CMakeLists.txt у нашій теці верхнього рівня додаємо CoreAddons до модуля find_package. Також варто додати три включення ECM, яка надасть нам змогу скористатися функцією ecm_setup_version. Ця функція уможливлює використання змінної PROJECT_VERSION у нашому коді, отже нам потрібно буде змінити лише одну змінну при переході до нових версій.

...
add_executable(helloworld main.cpp controller.cpp resources.qrc)
target_link_libraries(helloworld ... KF5::CoreAddons)

У файлі CMakeLists.txt у каталозі ‘src’ додайте controller.cpp до модуля add_executable і KF5::CoreAddons до модуля target_link_libraries.

Запуск програми

Тепер, якщо ви запустите програму і скористаєтеся пунктом «About» на загальній висувній панелі, ви побачите нашу сторінку відомостей щодо програми.

Знімок сторінки «Про програму» Kirigami