Pagina Info over

Informatie over uw toepassing

De pagina Info over biedt u een pagina die de melding over copyright van de toepassing toont samen met hen die bijdroegen en enige informatie over op welk platform het draait.

Eerst gaan we twee bestanden in de map src/ aanmaken genaamd about.cpp en 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 het bestand .h maken we deze klasse AboutType die geërfd is uit QObject.

De macro Q_OBJECT vertelt de compiler dat deze klasse eigen signalen en slots gebruikt, de macro Q_PROPERTY gedraagt zich als een klasse gegevenslid, maar het heeft extra mogelijkheden, het zal uw QML code toegang geven tot deze klasse.

De methode aboutData zal de toepassingsgegevens van KAboutData teruggeven.

about.cpp

#include "about.h"

In het bestand .cpp doen we een include van het bestand .h.

main.cpp

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

#include "about.h"

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

    KAboutData aboutData(
                         // De intern gebruikte programmanaam.
                         QStringLiteral("helloworld"),
                         // Een tekenreeks met een te tonen programmanaam.
                         i18nc("@title", "Hello World"),
                         // De tekenreeks met de programmaversie.
                         QStringLiteral(HELLOWORLD_VERSION_STRING),
                         // Korte beschrijving van wat de toepassing doet.
                         i18n("Hello world application"),
                         // De licentie waaronder deze code is uitgegeven.
                         KAboutLicense::GPL,
                         // Copyright-statement.
                         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();
    });
    ...
}

In het cpp-bestand voegen we KAboutData en het .h-bestand dat we zojuist hebben gemaakt in, KAboutData is een kerncomponent van KDE Frameworks die informatie over een toepassing opslaat, die daarna opnieuw gebruikt kan worden door vele andere KDE Frameworks-componenten. We maken een nieuw exemplaar van het object KAboutData met zijn tamelijk volledige standaard constructor en voegen informatie over de auteur toe.

We voegen ook dit bestand config-helloworld.h in die ons deze variabele HELLOWORLD_VERSION_STRING geeft die we later in deze handleiding instellen.

Nadat alle vereiste informatie is gezet, roepen we KAboutData::setApplicationData aan om de eigenschappen van het object QApplication te initialiseren.

Na de definitie van de QML Engine maken we een qmlRegisterSingletonType aan, het eerste argument is een URI, hoofdzakelijk een pakketnaam, het tweede en derde argument zijn respectievelijk hoofd en subversies, het vierde is de typenaam, de naam die we zullen aanroepen bij toegang tot de AboutType methoden.

In de lambda qmlRegisterSingletonType geven we gewoon een nieuw object 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
        }
    }
}

Ten eerste importeren we het pakket gedefinieerd in het bestand main.cpp, voegen een Kirigami.Action toe aan onze globale schuiflade die ons naar de Info over-pagina zal zenden en een component maakt met een Kirigami.AboutPage erin, de Info over-pagina heeft slechts één eigenschap: aboutData, we geven daarna Controller.aboutData eraan door.

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

In het bestand CMakeLists.txt in onze map op het hoogste niveau, voeg CoreAddons toe aan de module find_package. U zult ook deze drie ECM includes willen toevoegen die ons het gebruik van de functie ecm_setup_version biedt, deze functie laat ons de variabele PROJECT_VERSION in onze code gebruiken zodat we slechts één variabele hoeven te wijzigen wanneer versies omhoog gaan.

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

In het bestand CMakeLists.txt in de map ‘src’, voeg controller.cpp toe aan de module add_executable en KF5::CoreAddons toe aan de module target_link_libraries.

De toepassing uitvoeren

Als u nu uw toepassing uitvoert en de actie "Info over" aanklikt in de globale schuiflade zou u uw pagina Info over moeten zien.

Schermafdruk van de pagina Info over van Kirigami