A página
Kirigami.AboutPage
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.
Primeiro, vamos editar o nosso ficheiro 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 ficheiro main.cpp, incluímos 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 aboutData com o seu construtor predefinido e relativamente completo, e depois adicionar a informação do autor.
Iremos criar então um
qmlRegisterSingletonType()
. Este é usado para nos permitir importar o código em C++ como um módulo no nosso main.qml com o import org.kde.example 1.0.
O seu primeiro argumento é o URI que será usado para a importação, sendo os segundo e terceiro argumentos as versões principais e secundárias, respectivamente, o quarto o nome do tipo - o nome que iremos invocar ao aceder ao nosso tipo About e o último é uma referência ao objecto em C++ que está exposto no QML. No caso do último, iremos usar uma função lambda para instanciar o aboutData da nossa aplicação no local.
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 ficheiro main.cpp, nomeadamente a org.kde.example. Depois adicionamos uma
Kirigami.Action
à nossa
área global
, que nos enviará para a página Acerca, e criamos um componente com uma
Kirigami.AboutPage
nele, a qual está à espera de um objecto
KAboutData::applicationData()
. Nós expomos precisamente isso no nosso main.cpp e chamámos-lhe About, pelo que o podemos passar aqui.
No ficheiro CMakeLists.txt da nossa pasta de topo, certifique-se que tem o CoreAddons na nossa chamada find_package(). É necessária por causa do
KAboutData
.