Stran o programu
Informacije o vaši aplikaciji
Spletna stran
Kirigami.AboutPage
vam omogoča, da imate stran, ki prikazuje obvestilo o avtorski pravici aplikacije skupaj z navedbo avtorjev prispevkov in nekaterih informacij, na kateri platformi se izvaja.
Najprej bomo uredili svojo datoteko main.cpp
iz prejšnjih vaj.
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| #include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include <QUrl>
#include <KAboutData>
#include <KLocalizedContext>
#include <KLocalizedString>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
KLocalizedString::setApplicationDomain("helloworld");
QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
QCoreApplication::setApplicationName(QStringLiteral("Hello World"));
KAboutData aboutData(
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
return engine->toScriptValue(KAboutData::applicationData());
}
);
// Load an application from a QML file
QQmlApplicationEngine engine;
engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty()) {
return -1;
}
return app.exec();
}
|
V datoteko main.cpp
vključimo
KAboutData
, jedrno komponento Ogrodja KDE, ki shrani informacije o aplikaciji. Te informacije lahko nato ponovno uporabijo številne druge komponente Ogrodja KDE. Nov predmet aboutData
iniciramo z dokaj popolnim privzetim konstruktorjem in dodamo informacije o avtorju.
Ko so vsi zahtevani podatki nastavljeni, pokličemo
KAboutData::setApplicationData
za inicializacijo lastnosti predmeta QApplication.
Nato ustvarimo
qmlRegisterSingletonType()
. To je uporabljeno za uvoz kode C++ kot modula v naši main.qml
z import org.kde.example 1.0
.
Njen prvi argument je URI, ki bo uporabljen za uvoz, drugi in tretji argumenti sta glavna in manjša različica, četrta je ime vrste, nato ime, ki ga bomo poklicali pri dostopu vrste About
in zadnje je sklicevanje na objekt C++, ki je izpostavljen do QML. V slednjem primeru uporabljamo lambda, da postavimo `AboutData" v prostor naše aplikacije.
main.qml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| import QtQuick 2.15
import QtQuick.Controls 2.15 as Controls
import QtQuick.Layouts 1.15
import org.kde.kirigami 2.20 as Kirigami
import org.kde.example 1.0
Kirigami.ApplicationWindow {
id: root
title: i18nc("@title:window", "Day Kountdown")
globalDrawer: Kirigami.GlobalDrawer {
isMenu: true
actions: [
Kirigami.Action {
text: i18n("Quit")
icon.name: "gtk-quit"
shortcut: StandardKey.Quit
onTriggered: 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: aboutPage
Kirigami.AboutPage {
aboutData: About
}
}
ListModel {
id: kountdownModel
}
AddEditSheet {
id: addEditSheet
onAdded: 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)
}
function openPopulatedSheet(mode, index = -1, listName = "", listDesc = "", listDate = "") {
addEditSheet.mode = mode
addEditSheet.index = index;
addEditSheet.name = listName
addEditSheet.description = listDesc
addEditSheet.kdate = listDate
addEditSheet.open()
}
pageStack.initialPage: Kirigami.ScrollablePage {
title: i18nc("@title", "Kountdown")
actions.main: Kirigami.Action {
id: addAction
icon.name: "list-add"
text: i18nc("@action:button", "Add kountdown")
onTriggered: openPopulatedSheet("add")
}
Kirigami.CardsListView {
id: layout
model: kountdownModel
delegate: KountdownDelegate {}
}
}
}
|
Najprej uporabimo uvoz, ki smo ga določili v datoteki main.cpp
, in sicer org.kde.example
. Nato dodamo
Kirigami.Action
v naš
global drawer
ki nas bo poslala na stran About in v njej ustvarila komponento
Kirigami.AboutPage
, ki pričakuje predmet
KAboutData::applicationData()
. Izpostavili smo točno to v naši datoteki main.cpp
in jo poimenovali About
, tako, da jo lahko prenesemo sem.
CMakeLists
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| cmake_minimum_required(VERSION 3.16)
project(helloworld)
set(KF_MIN_VERSION "5.68.0")
set(QT_MIN_VERSION "5.12.0")
find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Quick Test Gui QuickControls2 Widgets)
find_package(KF5 ${KF_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 I18n CoreAddons)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_subdirectory(src)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
V datoteki CMakeLists.txt
v mapi najvišjega nivoja, preverite da imate CoreAddons
v vašem klicu find_package(). Je potreben za
KAboutData
.
1
2
| add_executable(helloworld main.cpp resources.qrc)
target_link_libraries(helloworld Qt5::Quick Qt5::Qml Qt5::Gui Qt5::QuickControls2 Qt5::Widgets KF5::Kirigami2 KF5::I18n KF5::CoreAddons)
|
V datoteki CMakeLists.txt
file v mapi src/
, ni potrebno ničesar, saj smo postavili aboutData
na pravo mesto.
Zagon aplikacije
Če zaženete aplikacijo in sprožite dejanje »O programu« v globalnem predalu, bi morali videti našo stran o programu.
![Posnetek zaslona strani o programu Kirigami] (o strani.png)