Kirigami.AboutPage ti permette di avere una pagina che mostra l'avviso di copyright dell'applicazione insieme all'elenco dei contributori e alcune informazioni su quale piattaforma è in esecuzione.
Per prima cosa modificheremo il nostro file main.cpp, che abbiamo visto nelle esercitazioni precedenti.
#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();}
Nel file main.cpp includiamo KAboutData, un componente fondamentale del framework KDE che ci consente di memorizzare informazioni sulla nostra applicazione. Queste informazioni possono quindi essere riutilizzate da molti altri componenti di KDE Frameworks. Istanziamo un nuovo oggetto aboutData con il suo costruttore predefinito abbastanza completo e aggiungiamo le informazioni sull'autore.
Creiamo quindi un qmlRegisterSingletonType(). Questo viene utilizzato per permetterci di importare il codice C++ come modulo nel nostro main.qml con import org.kde.example 1.0.
Il suo primo argomento è l'URI che verrà utilizzato per l'importazione, il secondo e il terzo argomento sono rispettivamente la versione maggiore e quella minore, il quarto è il nome del tipo, il nome che chiameremo quando accediamo al nostro tipo About, e l'ultimo è un riferimento all'oggetto C++ esposto a QML. In quest'ultimo caso, utilizziamo un lambda per creare un'istanza di "aboutData" della nostra applicazione.
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{}}}}
Per prima cosa utilizziamo l'importazione che abbiamo definito nel file main.cpp, vale a dire org.kde.example. Aggiungiamo quindi un Kirigami.Action al nostro cassetto globale che ci invierà alla pagina Informazioni e creeremo un componente con un Kirigami.AboutPage al suo interno, che prevede un oggetto KAboutData::applicationData(). Abbiamo esposto proprio questo nel nostro main.cpp e lo abbiamo chiamato About, quindi possiamo passarlo qui.
Nel file "CMakeLists.txt" nella nostra cartella di livello superiore, assicurati di avere "CoreAddons" nella chiamata a find_package(). È necessario per KAboutData.