我正在使用 Qt 5.9.4 商业许可证编写一个应用程序。我的应用程序在 Android 和 iOS 上运行。
问题:
Qt 有没有办法检测常见的移动设备事件,例如:
- 设备显示关闭
- 用户在 iOS/Android 上按下主页按钮后设备进入后台
- 在 Android 等设备上按下后退按钮
Android 和 iOS 平台都会触发大量此类事件。
如果 Qt 中有类/模块正在转发这些事件,那么我就不必编写 native (java 和 Objective-c) 类来在我的 QtApp 中获取这些事件。
最佳答案
这些事件大部分都是由Qt本身处理的,你可以通过经典的方式获取它们。 Qt 尝试尽可能隐藏 Android 特定的内容,并通过事件等传递这些内容,就像您在桌面应用程序上获取它们一样。
按下后退按钮会触发发送到主窗口的QCloseEvent
。您可以在 C++ 对象上安装事件过滤器来拦截它。对于 qml 来说是 Window::closing信号。
由于 Qt 不支持后台执行事件,因此后台按下也可能被报告为关闭事件 - 或者直接退出应用程序。
对于显示开关,我现在不确定,但也许 QGuiApplication::applicationStateChanged信号确实将其报告为 Qt::ApplicationSuspended
或其中的另一个状态 - 只需尝试一下即可! (其他事件也可能是这种情况)
Android 简短提示:如果您想要 Qt 无法处理的内容,您始终可以创建一个扩展 QtActivity
的自定义 Java 事件,并在 list 中使用它。从那时起,您可以使用 JNI 从 C++ 与 Java 交互,反之亦然。如果您需要这样做,请查看Qt Android Extras - 它们使使用 JNI 变得更加容易,并在 QtAndroid 命名空间中提供了一堆很好的包装类和实用方法,非常方便。
关于qt - 如何在 QtApp 上获取移动应用程序生命周期事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50800926/