Page « À propos »

Informations concernant votre application

La page « À propos » vous permet d'avoir une page affichant la déclaration de droit d'auteur de l'application ainsi que les contributeurs et quelques informations sur la plate-forme sur laquelle elle fonctionne.

Tout d'abord, nous allons créer deux fichiers dans le dossier « src/ », nommés « about.cpp » et « 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();
    }
};

Dans le fichier « .h », nous créons cette classe « AboutType » héritant de l'objet QObject.

La macro « Q_OBJECT » indique au compilateur que cette classe utilise ses propres signaux et connexions. La macro « Q_PROPERTY » se comporte comme un membre de données de classe, mais elle a des caractéristiques supplémentaires. Elle permettra à notre code QML d'avoir accès à cette classe.

La méthode « aboutData » retournera les données d'application concernant l'objet « KAboutData ».

about.cpp

#include "about.h"

Dans le fichier « cpp », seul le fichier « .h » est inclus.

main.cpp

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

#include "about.h"

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

    KAboutData aboutData(
                         // Le nom du programme utilisé en interne.
                         QStringLiteral("helloworld"),
                         // La chaîne de caractères pour afficher le nom du programme.
                         i18nc("@title", "Hello World"),
                         // La chaîne de version du programme.
                         QStringLiteral(HELLOWORLD_VERSION_STRING),
                         // Brève description de ce que fait l'application
                         i18n("Hello world application"),
                         // La licence sous laquelle le code est publié.
                         KAboutLicense::GPL,
                         // Déclaration de droits d'auteur.
                         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();
    });
    ...
}

Dans le fichier « cpp », nous incluons « KAboutData » et le fichier « .h » que nous venons de créer. KAboutData est un composant central de KDE Frameworks stockant des informations sur une application et pouvant ensuite être réutilisées par de nombreux autres composants des environnements de développement de KDE. Nous instancions un nouvel objet « KAboutData » avec son constructeur par défaut assez complet et ajoutons les informations sur l'auteur.

Nous incluons également ce fichier « config-helloworld.h » qui nous donne cette variable « HELLOWORLD_VERSION_STRING » que nous définirons plus tard dans ce tutoriel.

Une fois que toutes les informations requises ont été définies, nous appelons la méthode « KAboutData::setApplicationData » pour initialiser les propriétés de l'objet QApplication .

Avant la définition du moteur « QML », nous créons un objet qmlRegisterSingletonType. Le premier argument est un URI, en fait un nom de paquet, les deuxième et le troisième arguments sont respectivement les versions majeure et mineure, le quatrième argument est le nom du type, le nom que nous appellerons lors de l'accès aux méthodes « AboutType ».

Dans le lambda « qmlRegisterSingletonType », nous retournons simplement un nouvel objet « 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
        }
    }
}

Tout d'abord, nous importons le paquet que nous avons défini dans le fichier « main.cpp ». Puis, nous ajoutons un objet « Kirigami.Action » à notre tiroir global qui nous enverra à la page « A propos ». Enfin, nous créons un composant avec un objet « Kirigami.AboutPage » dedans. La page « A propos » n'a qu'une seule propriété : « aboutData », nous lui passons alors le paramètre « Controler.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)
...

Dans le fichier « CMakeLists.txt » de notre dossier de premier niveau, ajoutez « CoreAddons » au module « find_package ». Vous voudrez également ajouter ces trois includes « ECM » qui nous permettront d'utiliser la fonction « ecm_setup_version ». Cette fonction permet d'utiliser la variable « PROJECT_VERSION » dans notre code. Ainsi, nous n'avons à changer qu'une seule variable lors d'un changement de version.

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

Dans le fichier « CMakeLists.txt » du répertoire « src », ajoutez le fichier « controller.cpp » au module « add_executable » et « KF5::CoreAddons » au module « target_link_libraries ».

Exécution de l'application

Maintenant, si vous exécutez votre application et déclenchez l'action « A propos » dans le tiroir global, vous devriez voir notre page « A propos ».

 ! Copie d'écran de la page « A propos » de Kirigami