Spec-Zone.ru › Qt

Структура QAndroidApplication

структура QNativeInterface::QAndroidApplication

Нативный интерфейс для основного приложения на Android. Подробнее...

Заголовок: #include <QCoreApplication>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
С момента: Qt 6.2
  • Список всех членов, включая унаследованные

Статические публичные члены

int context()
void hideSplashScreen(int duration = 0)
bool isActivityContext()
QFuture<QVariant> runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever)
int sdkVersion()

Подробное описание

Доступ через QCoreApplication::nativeInterface().

Документация функций-членов

[static, since 6.2] int QAndroidApplication::context()

Возвращает контекст Android в виде jobject. Контекст является Activity, если объект основного Activity действителен. В противном случае, контекст является Service.

Эта функция была добавлена в Qt 6.2.

[static, since 6.2] void QAndroidApplication::hideSplashScreen(int duration = 0)

Скрывает экран загрузки с помощью эффекта затемнения на заданное время duration. Если duration не указан (по умолчанию 0), экран загрузки скрывается сразу после запуска приложения.

Эта функция была добавлена в Qt 6.2.

[static, since 6.2] bool QAndroidApplication::isActivityContext()

Возвращает true, если QAndroidApplication::context() предоставляет контекст Activity.

Эта функция была добавлена в Qt 6.2.

[static, since 6.2] QFuture<QVariant> QAndroidApplication::runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever)

Отправляет функцию runnable в поток Android. Функция будет помещена в очередь и выполнена в потоке пользовательского интерфейса Android. Если вызов производится в потоке пользовательского интерфейса Android, runnable будет выполнена немедленно. Если приложение Android приостановлено или основной Activity равен null, runnable добавляется в очередь потока пользовательского интерфейса Android.

Этот вызов возвращает QFuture<QVariant>, что позволяет выполнять как синхронные, так и асинхронные вызовы и обрабатывать любой тип возвращаемого значения. Однако для получения результата из QFuture::result() следует использовать QVariant::value().

Если выполнение runnable занимает больше времени, чем период timeout, блокирующие вызовы QFuture::waitForFinished() и QFuture::result() завершатся по истечении timeout. Однако, если runnable уже начала выполнение, она не будет отменена.

Следующий пример демонстрирует как выполнить асинхронный вызов, ожидающий возвращаемое значение:

auto task = QNativeInterface::QAndroidApplication::runOnAndroidMainThread([=]() {
    QJniObject surfaceView;
    if (!surfaceView.isValid())
        qDebug() << "SurfaceView object is not valid yet";

    surfaceView = QJniObject("android/view/SurfaceView",
                             "(Landroid/content/Context;)V",
                             QNativeInterface::QAndroidApplication::context());

    return QVariant::fromValue(surfaceView);
}).then([](QFuture<QVariant> future) {
    auto surfaceView = future.result().value<QJniObject>();
    if (surfaceView.isValid())
        qDebug() << "Retrieved SurfaceView object is valid";
});

Следующий пример демонстрирует как выполнить синхронный вызов с возвращаемым значением void:

QNativeInterface::QAndroidApplication::runOnAndroidMainThread([]() {
   QJniObject activity = QNativeInterface::QAndroidApplication::context();
   // Hide system ui elements or go full screen
   activity.callObjectMethod("getWindow", "()Landroid/view/Window;")
           .callObjectMethod("getDecorView", "()Landroid/view/View;")
           .callMethod<void>("setSystemUiVisibility", "(I)V", 0xffffffff);
}).waitForFinished();

Примечание: Будьте внимательны к типам операций, выполняемых в основном потоке Android, так как любая длительная операция может заблокировать отрисовку пользовательского интерфейса и обработку ввода приложения. Если функция должна выполняться длительное время, также рекомендуется использовать QDeadlineTimer в вашем runnable для управления выполнением и предотвращения блокирования потока пользовательского интерфейса. Обычно любая операция, длящейся более 5 секунд, может заблокировать пользовательский интерфейс приложения. Дополнительную информацию см. в Поддерживание отзывчивости приложения.

Эта функция была добавлена в Qt 6.2.

[static, since 6.2] int QAndroidApplication::sdkVersion()

Возвращает версию SDK Android. Также известна как уровень API.

Эта функция была добавлена в Qt 6.2.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qnativeinterface-qandroidapplication.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API