Página acerca de

Información sobre su aplicación

La «Página acerca de» le permite tener una página que muestra información sobre el copyright de la aplicación junto a los colaboradores y cierta información sobre la plataforma en la que se está ejecutando.

Primero, vamos a crear dos archivos en el directorio src/ llamados about.cpp y 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();
    }
};

En el archivo .h creamos esta clase AboutType que hereda de QObject.

La macro Q_OBJECT le indica al compilador que esta clase usa sus propias señales y slots; la macro Q_PROPERTY se comporta como un miembro de datos de la clase, aunque dispone de funcionalidad adicional; permitirá que nuestro código QML tenga acceso a esta clase.

El método aboutData devolverá los datos de la aplicación de KAboutData.

about.cpp

#include "about.h"

En el archivo .cpp solo incluimos el archivo .h.

main.cpp

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

#include "about.h"

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

    KAboutData aboutData(
                         // El nombre del programa usado internamente.
                         QStringLiteral("helloworld"),
                         // Una cadena con el nombre del programa a mostrar al usuario.
                         i18nc("@title", "Hello World"),
                         // La cadena con la versión del programa.
                         QStringLiteral(HELLOWORLD_VERSION_STRING),
                         // Breve descripción de lo que hace la aplicación.
                         i18n("Hello world application"),
                         // La licencia bajo la que se publica este código fuente.
                         KAboutLicense::GPL,
                         // Declaración de copyright.
                         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();
    });
    ...
}

En el archivo cpp incluimos KAboutData y el archivo .h que acabamos de crear. KAboutData es un componente principal de KDE Frameworks que guarda información sobre una aplicación, que otros componentes de KDE Frameworks pueden reutilizar. Creamos una instancia de un nuevo objeto KAboutData con su constructor predeterminado, que es bastante completo, y añadimos información sobre el autor.

También incluimos este archivo config-helloworld.h, que nos proporciona la variable HELLOWORLD_VERSION_STRING, que definiremos posteriormente en este tutorial.

Tras haber definido toda la información necesaria, llamamos a KAboutData::setApplicationData para inicializar las propiedades del objeto QApplication.

Tras definir el motor QML, creamos un qmlRegisterSingletonType. Su primer argumento es un URI, básicamente un nombre de paquete; el segundo y tercer argumentos son, respectivamente, el número de versión mayor y menor; el cuarto es el nombre del tipo, el nombre que llamaremos cuando accedamos a los métodos de AboutType.

En la lambda qmlRegisterSingletonType solo devolvemos un nuevo objeto 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
        }
    }
}

Primero, importamos el paquete que hemos definido en el archivo main.cpp, añadimos una Kirigami.Action a nuestro cajón global para que nos envíe a la página «Acerca de», y creamos un componente con una Kirigami.AboutPage en su interior. La página «Acerca de» solo tiene una propiedad: aboutData. Por último, le pasamos Controller.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)
...

En el archivo CMakeLists.txt de la carpeta superior, añada CoreAddons en el módulo find_package. También querrá añadir estas tres inclusiones ECM que nos van a permitir usar la función ecm_setup_version; esta función usa la variable PROJECT_VERSION en nuestro código, por lo que solo necesitamos cambiar una variable al aumentar el número de versión.

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

En el archivo CMakeLists.txt del directorio ‘src’, añada controller.cpp al módulo add_executable, y KF5::CoreAddons al módulo target_link_libraries.

Ejecución de la aplicación

Ahora, si ejecuta la aplicación y lanza la acción "Acerca de" del cajón global, debería ver nuestra página «Acerca de».

Captura de pantalla de la página acerca de Kirigami