Jump to content

Qt for HarmonyOS/qtohosextras doc/Bundled Embedded UI Extension Example - main.cpp

From Qt Wiki

Bundled Embedded UI Extension 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 <QFont>
 #include <QLabel>
 #include <QPushButton>
 #include <QVBoxLayout>
 #include <QWidget>
 #include <QtOhosExtras>
 #include <memory>

 namespace {

 std::unique_ptr<QWidget> makeBundledUiExtensionWindow(const QString &windowQAbilityBindingKey)
 {
     auto widget = std::make_unique<QWidget>();
     auto *layout = new QVBoxLayout(widget.get());
     widget->setLayout(layout);

     auto *label = new QLabel("Not clicked yet");
     layout->addWidget(label);

     auto *button = new QPushButton("Change label's text");
     layout->addWidget(button);

     QObject::connect(
         button, &QPushButton::clicked, label,
         [label, windowQAbilityBindingKey]() {
             label->setText(QString("Button in window %1 was clicked").arg(windowQAbilityBindingKey));
             QFont font = label->font();
             font.setBold(true);
             label->setFont(font);
         });

     return widget;
 }

 QWindow *getOrCreateUnderlyingQWindow(QWidget *qWidget)
 {
     qWidget->winId();
     return qWidget->windowHandle();
 }

 }

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

     QString windowAQAbilityBindingKey = "A";
     auto windowA = makeBundledUiExtensionWindow(windowAQAbilityBindingKey);
     QtOhosExtras::setBundledAbilityAndQWindowBindingKeyForQWindow(
         getOrCreateUnderlyingQWindow(windowA.get()),
         windowAQAbilityBindingKey);

     QString windowBQAbilityBindingKey = "B";
     auto windowB = makeBundledUiExtensionWindow(windowBQAbilityBindingKey);
     QtOhosExtras::setBundledAbilityAndQWindowBindingKeyForQWindow(
         getOrCreateUnderlyingQWindow(windowB.get()),
         windowBQAbilityBindingKey);

     return app.exec();
 }