如何在 QtApp 上获取移动应用程序生命周期事件

How to get mobile app lifecycle events on QtApp

我正在使用 Qt 5.9.4 商业许可证编写应用程序。我的应用程序在 Android 和 iOS.

上运行

问题:
Qt 中有没有一种方法可以检测常见的移动设备事件,例如:
- 设备显示关闭
- 用户在 iOS/Android
上按下主页按钮后设备进入后台 - 在 Android 等

上按下后退按钮

每个平台 Android 和 iOS 都会触发大量此类事件。

如果 Qt 中有 class/module 正在转发这些事件,那么我就不必做编写 native(java 和 objective-c) 类 将这些事件放入我的 QtApp.

这些事件中的大部分都是由Qt 本身处理的,您可以通过经典方式获取它们。 Qt 尝试尽可能好地隐藏 android 特定内容,并通过事件等传递这些内容,就像您在桌面应用程序上获取它们一样。

按下后退按钮会触发一个 QCloseEvent,该 QCloseEvent 会发送到主要 window。您可以在 C++ 对象上安装事件过滤器以拦截它。对于 qml,它是 Window::closing 信号。

由于 Qt 不支持活动的后台执行,后台按下也可能被报告为关闭事件 - 或者直接退出应用程序。

对于 DIsplay 开关,我现在不确定,但可能是 QGuiApplication::applicationStateChanged signal does report it as Qt::ApplicationSuspended 或其他状态 - 只需尝试一下! (其他事件也可能如此)


Android 的简短提示:如果你想要一些 Qt 无法处理的东西,你总是可以创建一个自定义 Java activity 来扩展 QtActivity 和在清单中使用它。从那里开始,您可以使用 JNI 与 C++ 中的 Java 交互,反之亦然。如果您需要这样做,请查看 Qt Android Extras - 它们使使用 JNI 变得更加 更容易,并提供了一堆漂亮的包装器 类 和实用方法在可以派上用场的 QtAndroid 命名空间中。