Página 'Acerca'

Informações sobre a sua aplicação

A página Acerca permite-lhe ter uma página que mostra as notas de direitos de cópia da aplicação, em conjunto com os colaboradores e algumas informações sobre a plataforma em que está a ser executado.

Em primeiro lugar, iremos criar dois ficheiros na pasta src/ chamados about.cpp e 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();
    }
};

No ficheiro .h iremos criar esta classe AboutType que herda de QObject.

A macro Q_OBJECT diz ao compilador que esta class usa 'signals' e 'slots' próprios, e a macro Q_PROPERTY comporta-se como um membro de classe de dados, só que com funcionalidades adicionais; a mesma irá permitir ao nosso código em QML ter acesso a esta classe.

O método aboutData irá devolver os dados da aplicação de KAboutData.

about.cpp

#include "about.h"

No ficheiro .cpp simplesmente incluímos o ficheiro .h.

main.cpp

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

#include "about.h"

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

    KAboutData aboutData(
                         // O nome usado internamente para o programa.
                         QStringLiteral("helloworld"),
                         // Um texto visível com o nome do programa.
                         i18nc("@title", "Hello World"),
                         // O texto da versão do programa.
                         QStringLiteral(HELLOWORLD_VERSION_STRING),
                         // Breve descrição do que faz a aplicação.
                         i18n("Hello world application"),
                         // A licença sob a qual é disponibilizado este código.
                         KAboutLicense::GPL,
                         // Aviso de Direitos de Cópia.
                         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();
    });
    ...
}

No ficheiro .cpp, incluímos o KAboutData e o ficheiro .h que acabámos de criar, o KAboutData é um componente das Plataformas do KDE de base que guarda informações sobre uma aplicação, as quais poderão ser reutilizadas por muitos componentes das Plataformas do KDE. Iremos instanciar um novo objecto KAboutData com o seu construtor predefinido e relativamente completo, e depois adicionar a informação do autor.

Também incluímos este ficheiro config-helloworld.h que nos dá a variável HELLOWORLD_VERSION_STRING que iremos ver mais tarde neste tutorial.

Depois de ter sido definida toda a informação necessária, invocamos o KAboutData::setApplicationData para inicializar as propriedades do objecto QApplication .

Antes da definição do Motor de QML, iremos criar um qmlRegisterSingletonType, sendo o primeiro argumento um URI, basicamente o nome de um pacote, e onde os segundo e terceiro argumentos são as versões principal e secundária, respectivamente, o quarto é o nome do tipo, ou seja, o nome que iremos invocar quando acedermos aos métodos do AboutType.

No lambda do qmlRegisterSingletonType simplesmente devolvemos um novo objecto 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
        }
    }
}

Em primeiro lugar, importamos o pacote que definimos no ficheiro main.cpp, adicionamos uma Kirigami.Action à nossa área global que nos enviará para a página 'acerca' e criar um componente com um Kirigami.AboutPage nela, sendo que a página 'Acerca' só tem uma propriedade - a aboutData -, onde iremos passar a ela o 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)
...

No ficheiro CMakeLists.txt na nossa pasta de topo, adicione o CoreAddons ao módulo find_package. Iremos também querer adicionar estas três inclusões do ECM que nos permitirão usar a função ecm_setup_version, onde a mesma nos deixa usar a variável PROJECT_VERSION no nosso código, para que só tenhamos de mudar uma variável quando incrementarmos as versões.

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

No ficheiro CMakeLists.txt da pasta ‘src’, adicione o controller.cpp ao módulo add_executable e o KF5::CoreAddons ao módulo target_link_libraries.

Executar a aplicação

Agora, se executar a sua aplicação e invocar a acção "Acerca" na área global, deverá ver a nossa página 'Acerca'.

Imagem da página Acerca do Kirigami