La
Kirigami.AboutPage
permet tenir una pàgina que mostra les notes dels drets d'autor de l'aplicació juntament amb la llista dels col·laboradors i certa informació sobre la plataforma en la qual s'està executant.
Primer, editarem el nostre fitxer main.cpp de les guies d'aprenentatge anteriors.
#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();}
En el fitxer main.cpp incloem
KAboutData
, un component central dels Frameworks del KDE que permet emmagatzemar la informació sobre l'aplicació. Aquesta informació després pot ser reutilitzada per molts altres components dels Frameworks del KDE. Instanciem un objecte aboutData nou amb el seu constructor predeterminat força complet i afegim la informació de l'autor.
Després creem un
qmlRegisterSingletonType()
. Això s'utilitza per a permetre importar el codi C++ com un mòdul en el nostre main.qml amb import org.kde.example 1.0.
El seu primer argument és l'URI que s'utilitzarà per a la importació, el segon i el tercer són les versions majors i menors respectivament, el quart és el nom del tipus, el nom que cridarem quan accedim al nostre tipus About, i l'últim és una referència a l'objecte C++ que està exposat al QML. En el cas d'aquest últim, utilitzem una lambda per a instanciar l'aboutData de la nostra aplicació en el seu lloc.
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{}}}}
Primer, utilitzarem la importació que hem definit al fitxer main.cpp, és a dir org.kde.example. Després s'afegeix
Kirigami.Action
al nostre
calaix global
que ens enviarà a la pàgina «Quant al», i crearà un component amb un
Kirigami.AboutPage
en ell, que espera un objecte
KAboutData::applicationData()
. Hem exposat precisament això en el nostre main.cpp i l'hem anomenat About, de manera que el podem passar aquí.
Al fitxer CMakeLists.txt de la nostra carpeta de nivell superior, assegureu-vos de tenir CoreAddons a la crida find_package(). És necessari per a
KAboutData
.