Strona "O programie"

Szczegóły o twojej aplikacji

Strona o programie daje stronę, która pokazuje uwagę o prawach autorskich aplikacji wraz z jej twórcami oraz pewne szczegóły nt. platformy, na której jest uruchomiona.

Najpierw w katalogu src/ utworzymy dwa pliki o nazwie about.cpp oraz 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();
    }
};

W pliku .h tworzymy klasę AboutType, która dziedziczy z QObject.

Makro Q_OBJECT mówi kompilatorowi, że tak klasa używa własnych sygnałów i slotów, makro Q_PROPERTY zachowuje się jak zmienna danowa danej klasy, lecz zawiera dodatkowe możliwości, a mianowicie umożliwi kodowi QML na dostęp do tej klasy.

Metoda aboutData zwróci dane aplikacji z KAboutData.

about.cpp

#include "about.h"

W pliku .cpp dołączamy tylko plik .h.

main.cpp

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

#include "about.h"

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

    KAboutData aboutData(
                         // Nazwa programu używana wewnętrznie.
                         QStringLiteral("helloworld"),
                         // Wyświetlana nazwa programu.
                         i18nc("@title", "Hello World"),
                         // Tekst wersji programu.
                         QStringLiteral(HELLOWORLD_VERSION_STRING),
                         // Krótki opis tego, co robi aplikacja.
                         i18n("Hello world application"),
                         // Licencja, na której jest wydany ten kod.
                         KAboutLicense::GPL,
                         // Uwaga o prawach do kopiowania.
                         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();
    });
    ...
}

W pliku zawieramy KAboutData oraz plik .h, który właśnie utworzyliśmy, KAboutData jest głównym składnikiem Szkieletów KDE, który przechowuje szczegóły o aplikacji, które później mogą być wykorzystane przez wiele innych składników Szkieletów KDE. Tworzymy nowy obiekt KAboutData, który jest całkowicie pełnym domyślnym konstruktorem i dodajemy szczegóły o autorze.

Dołączamy także plik config-helloworld.h, który daje nam zmienną HELLOWORLD_VERSION_STRING, którą ustawimy później w tym samouczku.

Po ustawieniu wszystkich wymaganych danych, wywołujemy KAboutData::setApplicationData, aby przygotować właściwości obiektu QApplication.

Przed określeniem Silnika QML, tworzymy qmlRegisterSingletonInstance, gdzie pierwszym argumentem jest URI, co stanowi nazwę pakietu, drugi i trzeci argument stanowi odpowiednio główną i poboczną wersję, czwarty nazwę jego rodzaju, nazwę, którą będziemy wywoływać przy dostępie do metod AboutType.

W lamdzie qmlRegisterSingletonType zwracamy nowy obiekt 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
        }
    }
}

Najpierw, importujemy pakiet, który określiliśmy w pliku main.cpp, dodajemy Kirigami.Action do naszej globalnej półki, która wyśle nas do strony o programie i tworzymy składnik z Kirigami.AboutPage w nim, strona o programie ma tylko jedną właściwość: aboutData, następnie przekazujemy Conrtoller.aboutData do niej.

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

W pliku CMakeLists.txt w naszym głównym katalogu, dodaj CoreAddons do modułu find_package. Musisz także dodać, trzy pliki dołączane ECM, które umożliwią używanie funkcji ecm_setup_version, funkcja ta umożliwia używanie zmiennej PROJECT_VERSION w naszym kodzie, więc wystarczy, że zmienimy jedną zmienną, gdy podniesiemy numer naszej wersji.

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

W pliku CMakeLists.txt w katalogu ‘src’, dodaj controller.cpp do modułu add_executable oraz KF5::CoreAddons do modułu target_link_libraries.

Uruchamianie aplikacji

Teraz, gdy uruchomisz aplikację i wyzwolisz działanie "About" w globalnej półce, to powinieneś zobaczyć stronę o programie.

Zrzut ekranu strony o programie Kirigami