Om-sida

Information om ditt program

Sidan Om låter dig ha en sida som visar programmets copyrightmeddelande tillsammans med bidragsgivare och en del information om vilken plattform det kör på.

Först skapar vi två filer i katalogen src/ som heter om.cpp och om.h.

om.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();
    }
};

I .h-filen skapar vi klassen AboutType som ärvs från QObject.

Makrot Q_OBJECT talar om för kompilatorn att klassen använder egna signaler och slots. Makrot Q_PROPERTY beter sig som en datamedlem i klassen, men den har ytterligare funktioner. Det låter vår QML-kod få tillgång till klassen.

Metoden aboutData returnerar programdata från KAboutData.

om.cpp

#include "about.h"

I .cpp filen inkluderar vi bara .h filen.

main.cpp

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

#include "about.h"

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

    KAboutData aboutData(
                         // Programnamnet som används internt.
                         QStringLiteral("helloworld"),
                         // En visningsbar programnamnssträng.
                         i18nc("@title", "Hello World"),
                         // Programversionssträngen.
                         QStringLiteral(HELLOWORLD_VERSION_STRING),
                         // Kort beskrivning av vad programmet gör.
                         i18n("Hello world application"),
                         // Licensen som koden ges ut med.
                         KAboutLicense::GPL,
                         // Copyrightsats.
                         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();
    });
    ...
}

I cpp-filen inkluderar vi KAboutData och .h-filen vi just skapat, KAboutData är en huvudkomponent i KDE Ramverk som lagrar information om ett program, vilket sedan kan återanvändas av många andra komponenter i KDE Ramverk. Vi lägger till ett nytt KAboutData objekt med dess ganska fullständiga förvalda konstruktor och lägger till information om upphovsmän.

Vi inkluderar också filen config-helloworld.h som ger oss variabeln HELLOWORLD_VERSION_STRING som vi kommer att se senare i handledningen.

Efter all nödvändig information har angetts, anropar vi KAboutData::setApplicationData för att initiera egenskaperna i objektet QApplication .

Efter definitionen av QML Engine, skapar vi en qmlRegisterSingletonType, det första argumentet är en webbadress, egentligen ett paketnamn, det andra och tredje argumentet är huvudversion och mindre version, det fjärde är typnamnet, namnet som vi anropar när vi ska komma åt metoder i AboutType.

I qmlRegisterSingletonType lambda-funktion returnerar vi bara ett nytt AboutType objekt.

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
        }
    }
}

Först importerar vi paketet vi definierade i filen main.cpp, lägger till en Kirigami.Action i vår globala låda som skickar oss om-sidan och skapar en komponent med Kirigami.AboutPage inuti. Om-sidan har bara en egenskap: aboutData, vi skickar sedan Controller.aboutData till den.

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

Lägg till CoreAddons i modulen find_package i filen CMakeLists.txt file i vår toppnivåkatalog, Du behöver också lägga till tre ECM include, som låter oss använda funktionen ecm_setup_version. Den funktionen låter oss använda variabeln PROJECT_VERSION i vår kod, så att vi bara behöver ändra en variabel när vi ökar versionen.

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

Lägg till controller.cpp i modulen add_executable och KF5::CoreAddons i modulen target_link_libraries i filen CMakeLists.txt i katalogen ‘src’.

Köra programmet

Om du nu kör programmet och använder alternativet "Om" i den globala lådan, bör du se vår Om-sida.

Skärmbild av Om-sidan i Kirigami