首页 > 解决方案 > 如何在 QtApp 上获取移动应用生命周期事件

问题描述

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

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

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

如果Qt 中有类/模块正在转发这些事件,那么我不必做额外的工作来编写本机(java 和 Objective-c )类来在我的QtApp中获取这些事件。

标签: qtqmlqt-quickqtquickcontrols2

解决方案


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

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

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

对于我现在不确定的 DISplay 开关,但也许QGuiApplication::applicationStateChanged信号确实将其报告为Qt::ApplicationSuspended这些状态中的一个或另一个 - 只需尝试一下!(其他事件也可能是这种情况)


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


推荐阅读