qt - 如何在 QtApp 上获取移动应用生命周期事件
问题描述
我正在使用Qt 5.9.4商业许可证编写应用程序。我的应用程序在 Android 和 iOS 上运行。
问题:
Qt 中是否有办法检测常见的移动设备事件,例如:
- 设备显示关闭
- 用户在 iOS/Android 上按下主页按钮后设备进入后台
- 在 Android 上按下后退按钮等
每个平台 Android 和 iOS 都会触发大量此类事件。
如果Qt 中有类/模块正在转发这些事件,那么我不必做额外的工作来编写本机(java 和 Objective-c )类来在我的QtApp中获取这些事件。
解决方案
大多数这些事件都是由 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
它们非常方便。
推荐阅读
- python - Python SetThreadExecutionState:如何防止屏幕显示关闭?
- javascript - 根据单选按钮选择在下拉列表中显示项目
- java - 通过传递特定日期来确定星期几?
- apache-nifi - 从多个相同的流文件中只转发一个流文件
- php - Laravel php artisan migrate 的回滚操作:refresh --seed
- mongodb - Mongodb 多语言搜索:哪种模式更适合更快的搜索结果 - 嵌套或直接具有特定于语言的字段
- apache - 如何在 .htaccess 中使用自定义逻辑重定向 url?
- python - 使用正则表达式查找包含重复单词的句子
- html - 当我直接点击时,HTML 无法加载 CSS,但是当我使用 VSCode 上线时,它加载得很好
- python - 如何仅从 DateTime 对象中检索时间但保留数据类型