Onboarding Tutorial
// SPDX-FileCopyrightText: 2026 Sandro Andrade <sandroandrade@kde.org> // SPDX-License-Identifier: LGPL-2.0-or-later #include <QGuiApplication> #include <QDir> #include <QQmlApplicationEngine> #include <QQmlContext> #include <QQuickStyle> #include <QUrl> #include <utility> #include <KLocalizedContext> #include <KLocalizedQmlContext> #include <KLocalizedString> static QStringList takeImportPathEnvironmentVariable(const char *name) { const QByteArray value = qgetenv(name); if (value.isEmpty()) { return {}; } const QStringList paths = QString::fromLocal8Bit(value).split(QDir::listSeparator(), Qt::KeepEmptyParts); QStringList normalizedPaths; normalizedPaths.reserve(paths.size()); for (const QString &path : paths) { if (path.isEmpty() || QDir::isAbsolutePath(path)) { normalizedPaths.append(path); } else { normalizedPaths.append(QDir::current().absoluteFilePath(path)); } } qunsetenv(name); return normalizedPaths; } int main(int argc, char *argv[]) { QStringList importPaths = takeImportPathEnvironmentVariable("QML_IMPORT_PATH"); importPaths += takeImportPathEnvironmentVariable("QML2_IMPORT_PATH"); QGuiApplication app(argc, argv); KLocalizedString::setApplicationDomain("kirigami-addons6"); QQuickStyle::setStyle(QStringLiteral("org.kde.desktop")); QQmlApplicationEngine engine; const QDir applicationDir(QCoreApplication::applicationDirPath()); const QString buildImportPath = applicationDir.absoluteFilePath(QStringLiteral("../../bin")); if (QDir(buildImportPath).exists()) { importPaths.prepend(buildImportPath); } importPaths.removeDuplicates(); for (auto it = importPaths.crbegin(); it != importPaths.crend(); ++it) { if (!it->isEmpty()) { engine.addImportPath(*it); } } KLocalization::setupLocalizedContext(&engine); QObject::connect( &engine, &QQmlApplicationEngine::objectCreationFailed, &app, []() { QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(QUrl(QStringLiteral("qrc:/qt/qml/org/kde/kirigamiaddons/examples/onboardingtutorial/Main.qml"))); return QGuiApplication::exec(); }