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.

First, we are going to create two files in the src/ directory called about.cpp and 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();
    }
};

In the .h file we create this class AboutType which is inherited from 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.

The aboutData method will return the application data from KAboutData.

about.cpp

#include "about.h"

In the .cpp file we just include the .h file.

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.

After the QML Engine definition, we create a qmlRegisterSingletonType, the first argument is a URI, basically a package name, the second and third arguments are major and minor versions respectively, the fourth is the type name, the name that we will call when accessing the AboutType methods.

In the qmlRegisterSingletonType lambda we just return a new AboutType object;

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