QNativeInterface::QAndroidApplication Struct
Android 平台上某核心应用程序的原生接口。更多内容...
| 标题: | #include <QCoreApplication> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 自: | Qt 6.2 |
- 所有成员列表(包括继承的成员)
- QAndroidApplication 属于“本机接口”类。
公共函数
| QAndroidApplication() | |
| QAndroidApplication(const QNativeInterface::QAndroidApplication &) | |
| QAndroidApplication(QNativeInterface::QAndroidApplication &&) | |
| QNativeInterface::QAndroidApplication & | operator=(QNativeInterface::QAndroidApplication &&) |
| QNativeInterface::QAndroidApplication & | operator=(const QNativeInterface::QAndroidApplication &) |
静态公共成员
(since 6.2) QJniObject | context() |
(since 6.2) void | hideSplashScreen(int duration = 0) |
(since 6.2) bool | isActivityContext() |
(since 6.2) QFuture<QVariant> | runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever) |
(since 6.2) int | sdkVersion() |
成员函数文档
[constexpr noexcept default] QAndroidApplication::QAndroidApplication()
默认——构造一个QAndroidApplication 的实例。
[delete] QAndroidApplication::QAndroidApplication(const QNativeInterface::QAndroidApplication &)
复制并构造一个QAndroidApplication 实例。该函数已被删除。
[delete] QAndroidApplication::QAndroidApplication(QNativeInterface::QAndroidApplication &&)
通过移动构造一个QAndroidApplication 实例。该函数已被删除。
[static, since 6.2] QJniObject QAndroidApplication::context()
返回一个作为QtJniTypes::Context 的Android上下文。如果最近启动的活动对象有效,则该上下文为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()
如果 `QAndroidApplication::context()` 返回的上下文类型为 `Activity `,则返回 `true `。
该函数在 Qt 6.2 中引入。
[static, since 6.2] QFuture<QVariant> QAndroidApplication::runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever)
将函数runnable 发布到Android线程。该函数将被加入队列,并在Android UI线程上执行。如果是在Android UI线程上调用该函数,则会立即执行runnable 。如果Android应用处于暂停状态,或者主Activity为null,则runnable 会被添加到Android主线程的队列中。
此调用返回一个QFuture<QVariant>,它既支持同步调用也支持异步调用,并且能够处理任何返回类型。但是,若要从QFuture::result() 获取结果,应使用QVariant::value()。
如果runnable 的执行时间超过了timeout 的周期,则阻塞调用QFuture::waitForFinished() 和QFuture::result() 将在timeout 经过后终止。但是,如果runnable 已经开始执行,则不会被取消。
以下示例演示了如何运行一个需要返回类型的异步调用:
autotask= 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());
returnQVariant::fromValue(surfaceView);
}).then([](QFuture<QVariant>future) {
autosurfaceView=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 主线程上执行的操作,因为任何耗时较长的操作都可能阻塞应用的 UI 渲染和输入处理。如果预计函数执行时间较长,建议在 `runnable ` 中使用 `QDeadlineTimer ` 来管理执行过程,并确保其不会阻塞 UI 线程。 通常,任何持续时间超过 5 秒的操作都可能阻塞应用的 UI。有关更多信息,请参阅《保持应用响应性》。
该函数于 Qt 6.2 中引入。
[static, since 6.2] int QAndroidApplication::sdkVersion()
返回 Android SDK 版本。这也被称为 API 级别。
该函数自 Qt 6.2 起引入。
[delete] QNativeInterface::QAndroidApplication &QAndroidApplication::operator=(QNativeInterface::QAndroidApplication &&)
将other 按值赋给该QAndroidApplication 实例。此函数已被删除。
[delete] QNativeInterface::QAndroidApplication &QAndroidApplication::operator=(const QNativeInterface::QAndroidApplication &)
将other 复制并赋值给此QAndroidApplication 实例。该函数已被删除。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.