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

标签 qt qml qt-quick qtquickcontrols2

我正在使用 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/

相关文章:

c++ - QObject 真的有多重?

qt - 如何在 ListView 之外访问 QML 中的 QSortFilterProxyModel 元素

qt - QML 适合所有分辨率的屏幕

Qt5 - 将简单的 Qt Quick 应用程序移植到 Qt5。需要帮助

c++ - 在 Qt4 应用程序中使用 user32.dll 中的函数

mysql - qt创建者错误: LNK 2019: unresolved external symbol “__declspec(dllimport) public: void__thiscall

qt - QtQuick 中从上到下的本地化

c++ - QML - 启动时的主窗口位置(屏幕中心)

c++ - QtConcurrent::map 不接受参数

qt - MouseArea 移动时无法更新 mouseContains 属性