Jump to content

Qt for HarmonyOS/qtohosextras doc/Preload Example - main.cpp

From Qt Wiki

Preload Example - main.cpp

 // Copyright (C) 2025 The Qt Company Ltd.
 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

 #include <QApplication>
 #include <QDebug>
 #include <QLabel>
 #include <QSharedPointer>
 #include <QVBoxLayout>
 #include <QWidget>
 #include <QtOhosExtras>

 namespace {

 QWidget *initApplication(QtOhosExtras::QOhosWantInfo::LaunchReason launchReason)
 {
     auto *window = new QWidget;
     window->setAttribute(Qt::WA_DeleteOnClose);
     window->resize(400, 200);

     auto *label = new QLabel(
         launchReason == QtOhosExtras::QOhosWantInfo::LaunchReason::Preload
             ? QString("Preloaded window content")
             : QString("Non-preloaded window content"),
         window);

     label->setAlignment(Qt::AlignCenter);

     auto *layout = new QVBoxLayout(window);
     layout->addWidget(label);

     return window;
 }

 }

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);

     const auto wantInfo = QtOhosExtras::QOhosAppContext::getAppLaunchWantInfo();
     const auto appLaunchReason = wantInfo->launchReason();

     auto *window = initApplication(appLaunchReason);

     if (appLaunchReason == QtOhosExtras::QOhosWantInfo::LaunchReason::StartAbility) {
         window->show();
     } else if (appLaunchReason == QtOhosExtras::QOhosWantInfo::LaunchReason::Preload) {
         struct Context {
             QWidget *window;
             QMetaObject::Connection connection;
         };

         auto context = QSharedPointer<Context>::create();
         context->window = window;

         auto abilityContext = QtOhosExtras::QOhosAbilityContext::getDefaultInstance();
         context->connection = QObject::connect(
             abilityContext.get(),
             &QtOhosExtras::QOhosAbilityContext::newWantInfoReceived,
             context->window,
             [context](auto wantInfo) {
                 if (wantInfo->launchReason() == QtOhosExtras::QOhosWantInfo::LaunchReason::StartAbility) {
                     QObject::disconnect(context->connection);
                     context->window->show();
                 }
             });
     } else {
         qWarning()
             << "Expected StartAbility or Preload app launch reason - got QtOhosExtras::QOhosWantInfo::LaunchReason("
             << static_cast<int>(appLaunchReason) << ")";
     }

     return app.exec();
 }