Kirigami.AboutPage permite que você tenha uma página que mostre o aviso de direitos autorais do aplicativo, juntamente com a lista de contribuidores e algumas informações sobre a plataforma em que ele está sendo executado.
Primeiro, vamos editar nosso arquivo main.cpp dos tutoriais anteriores.
#include<QApplication>#include<QQmlApplicationEngine>#include<QtQml>#include<QUrl>#include<KAboutData>#include<KLocalizedContext>#include<KLocalizedString>intmain(intargc,char*argv[]){QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QApplicationapp(argc,argv);KLocalizedString::setApplicationDomain("helloworld");QCoreApplication::setOrganizationName(QStringLiteral("KDE"));QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));QCoreApplication::setApplicationName(QStringLiteral("Hello World"));if(qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")){QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));}KAboutDataaboutData(QStringLiteral("helloworld"),i18nc("@title","Hello World"),QStringLiteral("1.0"),i18n("Hello world application"),KAboutLicense::GPL,i18n("(c) 2021"));aboutData.addAuthor(i18nc("@info:credit","Your name"),i18nc("@info:credit","Author Role"),QStringLiteral("your@email.com"),QStringLiteral("https://yourwebsite.com"));// Set aboutData as information about the app
KAboutData::setApplicationData(aboutData);// Register a singleton that will be accessible from QML.
qmlRegisterSingletonType("org.kde.example",// How the import statement should look like
1,0,// Major and minor versions of the import
"About",// The name of the QML object
[](QQmlEngine*engine,QJSEngine*)->QJSValue{// Here we retrieve our aboutData and give it to the QML engine
// to turn it into a QML type
returnengine->toScriptValue(KAboutData::applicationData());});// Load an application from a QML file
QQmlApplicationEngineengine;engine.rootContext()->setContextObject(newKLocalizedContext(&engine));engine.load(QUrl(QStringLiteral("qrc:/main.qml")));if(engine.rootObjects().isEmpty()){return-1;}returnapp.exec();}
No arquivo main.cpp, incluímos KAboutData, um componente central do KDE Framework que nos permite armazenar informações sobre nosso aplicativo. Essas informações podem ser reutilizadas por muitos outros componentes do KDE Framework. Instanciamos um novo objeto aboutData com seu construtor padrão bastante completo e adicionamos informações sobre o autor.
Em seguida, criamos um qmlRegisterSingletonType(). Isso nos permite importar o código C++ como um módulo em nosso main.qml com import org.kde.example 1.0.
O primeiro argumento é o URI que será usado para a importação, o segundo e o terceiro argumentos são as versões principal e secundária, respectivamente, o quarto é o nome do tipo, o nome que chamaremos ao acessar nosso tipo About, e o último é uma referência ao objeto C++ exposto ao QML. No caso deste último, usamos um lambda para instanciar o aboutData do nosso aplicativo.
importQtQuickimportQtQuick.LayoutsimportQtQuick.ControlsasControlsimportorg.kde.kirigamiasKirigamiimportorg.kde.example1.0Kirigami.ApplicationWindow{id: roottitle:i18nc("@title:window","Day Kountdown")globalDrawer:Kirigami.GlobalDrawer{isMenu:trueactions:[Kirigami.Action{text:i18n("Quit")icon.name:"gtk-quit"shortcut:StandardKey.QuitonTriggered:Qt.quit()},Kirigami.Action{// <==== Action to open About page
text:i18n("About")icon.name:"help-about"onTriggered:pageStack.layers.push(aboutPage)}]}Component{// <==== Component that instantiates the Kirigami.AboutPage
id: aboutPageKirigami.AboutPage{aboutData:About}}ListModel{id: kountdownModel}AddEditSheet{id: addEditSheetonAdded:kountdownModel.append({"name":name,"description":description,"date":Date.parse(kdate)});onEdited:kountdownModel.set(index,{"name":name,"description":description,"date":Date.parse(kdate)});onRemoved:kountdownModel.remove(index,1)}functionopenPopulatedSheet(mode,index=-1,listName="",listDesc="",listDate=""){addEditSheet.mode=modeaddEditSheet.index=index;addEditSheet.name=listNameaddEditSheet.description=listDescaddEditSheet.kdate=listDateaddEditSheet.open()}pageStack.initialPage:Kirigami.ScrollablePage{title:i18nc("@title","Kountdown")actions:[Kirigami.Action{id: addActionicon.name:"list-add"text:i18nc("@action:button","Add kountdown")onTriggered:openPopulatedSheet("add")}]Kirigami.CardsListView{id: layoutmodel:kountdownModeldelegate:KountdownDelegate{}}}}
Primeiro, usamos a importação que definimos no arquivo main.cpp, ou seja, org.kde.example. Em seguida, adicionamos um Kirigami.Action à nossa gaveta global que nos levará à página "Sobre" e criaremos um componente com uma Kirigami.AboutPage, que espera um objeto KAboutData::applicationData()]. Expomos exatamente isso em nosso main.cpp e o chamamos de About, para que possamos passá-lo aqui.
No arquivo CMakeLists.txt em nossa pasta de nível superior, certifique-se de ter CoreAddons em sua chamada find_package(). Ele é necessário para KAboutData.