Kirigami.AboutPage
biedt u een pagina die de melding over copyright van de toepassing toont samen met hen die bijdroegen en enige informatie over op welk platform het draait.
Eerst gaan we ons bestand main.cpp uit de vorige inleidingen bewerken.
#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();}
In het bestand main.cpp voegen we
KAboutData
is een kerncomponent van KDE Frameworks die ons informatie over onze toepassing laat opslaan. Deze informatie kan daarna opnieuw gebruikt worden door vele andere KDE Frameworks-componenten. We maken een nieuw exemplaar van een object aboutData met zijn tamelijk volledige standaard constructor en voegen informatie over de auteur toe.
Daarna maken we een
qmlRegisterSingletonType()
. Deze wordt gebruikt om ons toe te staan de C++ code als een module in onze main.qml met import org.kde.example 1.0 te importeren.
Zijn eerste argument is de URI die gebruikt zal worden voor het importeren, het tweede en het derde argument zijn respectievelijk majeure en mineure versies, het vierde is het type naam, de naam die we zullen aanroepen bij toegang tot ons type About en het laatste is een referentie naar het C++ object dat wordt blootgesteld aan QML. In het laatste geval gebruiken we een lambda om ter plekke en exemplaar te maken van de aboutData van onze toepassing.
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{}}}}
Ten eerste gebruiken we het geïmporteerde dat we definiëren in het bestand main.cpp, namelijk org.kde.example. Daarna voegen we een
Kirigami.Action
toe aan onze
global drawer
die ons naar de pagina About (Info over) zendt en een component met een
Kirigami.AboutPage
erin aanmaakt, die een object
KAboutData::applicationData()
verwacht. We stellen precies dat zichtbaar in onze main.cpp en noemen het About, zodat we het hier kunnen doorgeven.