Kirigami.AboutPage надає вам змогу показувати дані щодо авторських прав на програму, список учасників розробки та деякі відомості щодо того, на якій платформі запущено програму.
Спочатку, ми внесемо зміни до нашого файла main.cpp з попередніх частин підручника.
#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();}
У файлі «main.cpp» ми включаємо KAboutData, який є основним компонентом KDE Frameworks, який надає нам змогу зберігати відомості щодо програми, які згодом можна повторно використати у багатьох інших компонентах KDE Frameworks. Ми створюємо екземпляр нового об'єкта aboutData із його очевидно повним типовим конструктором та додаємо дані щодо авторства.
Потім ми створюємо qmlRegisterSingletonType(). Ця функція надає нам змогу імпортувати код C++ як модуль у нашому main.qml за допомогою інструкції import org.kde.example 1.0.
Першим аргументом є адреса, яку буде використано для імпортування, другим і третім аргументами є основна і проміжна версії, відповідно, четвертим аргументом є назва типу, назва, яку ми викликатимемо при доступі до методів нашого типу About. Останнім аргументом є посилання на об'єкт C++, доступ до якого буде відкрито для QML. В останньому випадку ми використовуємо лямбду для створення екземпляра aboutData нашої програми на місці.
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{}}}}
Спершу ми використовуємо імпортування, яке ми визначити у файлі main.cpp, а саме org.kde.example. Потім додаємо Kirigami.Action на нашу загальну висувну панель. Відповідна кнопка надаватиме нам змогу переходити на сторінку «Про програму». Створюємо на загальній панелі компонент з Kirigami.AboutPage на ньому, яка очікуватиме об'єкт KAboutData::applicationData(). Сторінка «Про програму» матиме лише одну властивість — aboutData. Ми відкрили саме це у нашому main.cpp і назвали його About, тому тут можемо це пропустити.