新功能
Qt 应用管理器 6.7
应用程序管理器现在全面支持系统 UI 和应用程序的 QML 工具支持(例如编译)。已经将 application-features 示例 调整以使用这些新功能。为此,QML 对象实现的大部分内容都必须重写。这意味着一些 API 无法向后兼容。我们尽量将更改控制在最小范围内,并在可能的情况下提供兼容性别名,但某些更改不可避免。
最重要的更改是现在 ApplicationManagerWindow 在单进程和多进程应用程序中都是从 QObject 派生的(之前在单进程模式下是从 FocusScope 派生的,在多进程模式下是从 Window 派生的)。虽然在多进程应用程序中有一些正负影响,但这些对单进程或混合模式应用程序有很多好处,现在所有情况下都有一个一致的 API,具有更多常用的功能。
- 新的 API 与 Qt 现有的 Window API 非常相似,包括附加属性。
- 现在在单进程模式下也支持跟踪窗口的 active 状态及其 activeFocusItem。
- 将 ApplicationManagerWindow 嵌入到另一个类似预览的 Window::parent 机制中尚不支持。
- 如果需要,仍然可以完全访问 backingObject(《Window》或《Item》)。
还有一些更改可能会影响您,如果您正在实现插件和自定义 appman 或启动器可执行文件。
- 可配置功能的定义(例如
AM_MULTI_PROCESS
)已被删除,因为相同的功能已经可以通过 Qt 的功能宏(例如QT_CONFIG(am_multi_process)
)使用。 - 由于应用程序管理器支持构建针对较旧版本的 Qt(最低到最新的 LTS 版本),现在您也可以获得类似于 Qt 的特定于应用程序管理器的版本定义(
QT_AM_VERSION{,_STR,_MAJOR,_MINOR,_PATCH}
)。 - 将模块
Qt::AppManLauncherPrivate
重命名为Qt::AppManApplicationMainPrivate
,将类LauncherMain
重命名为ApplicationMain
,以更好地反映其目的:该模块最初是 QML 启动器的基础,但后来发展成为启动器以及原生应用程序的通用构建块。
此外,还有一些额外的、值得注意的更改
- Bubblewrap 容器 插件现在在内核命名空间(共享)方面变得更加灵活。
- 为多个运行时和容器设置快速启动现在变得更加灵活。
- 自5.14版以来已弃用的 ApplicationInstaller 单例现在已经被移除。
- 与之前一样,已经移除了对假数据(dummy-data)的支持。这已经在 Qt 6.3 中的
qml
和qmlscene
工具中完成了。 - 已添加了一个名为 appman-package-server 的新工具,它取代了已弃用的配套项目 Qt 汽车套件部署服务器 的功能。与已弃用的项目一样,这并不是为生产环境中的应用商店后端设计的,而是一个易于使用的工具,供开发人员或 CI 环境测试和验证软件包安装。这还附带了一个新的 示例。
Qt 应用程序管理器 6.6
增加了两个新功能
- NotificationModel 将现在补充现有的 ApplicationModel 和 IntentModel 类。
- 应用程序管理器现在包含一个
bubblewrap
容器集成:这使用 bubblewrap 工具创建一个新的内核命名空间,并在系统中隔离的新沙盒内运行所需的二进制文件。这是在 Linux Flatpak生态系统 中使用的基础技术。请参阅 Bubblewrap 容器示例 以了解带有测试应用程序的示例设置。
此外,还有一些功能上的变化
- IntentServerHandler::visibility 属性现在默认为 公共 而不是 私有,就像它在应用清单文件中的客户端意图定义一样工作。
- 当通过 ApplicationManager::stopApplication() 请求时,QML 应用程序现在将立即退出,如果没有连接到 ApplicationInterface::quit() 信号的处理程序。在此之前,这些应用程序仅在 250msec 超时后才会被强制终止。
- 快速启动机制现在可以检测损坏的运行时/容器组合,并将它们禁用而不是尝试无限循环中重新启动它们。这可以通过新的配置参数
failedStartLimit
和failedStartLimitIntervalSec
进行微调。 - 为了支持 JavaScript 的 严格 模式,PackageManager 单例的
package
角色必须重命名为packageObject
,因为package
在严格模式下是一个保留的关键字。在非严格模式下仍然提供旧的package
角色旧。所有其他单例模型都获得了类似*Object
的别名角色,以保持 API 的一致性。
Qt 应用程序管理器 6.3
对与包、应用程序和意图字段相关的图标icon
、name
和description
的API和清单定义已进行清理。现在三者都支持相同的API,其中包的字段可以作为应用程序和意图对象的备用。由于属性name
和函数name
与ApplicationObject中的冲突,以前调用Application.name(language)
函数的用户代码现在需要替换为Application.names[language]
。
Qt应用程序管理器6.2
没有添加新API,但构建系统已从qmake切换到CMake,并最终移除了已弃用的旧ApplicationInterfaceExtension
IPC机制。在5.14版本中已经添加了新的意图机制作为对旧IPC的直接替代。
© 2024 Qt公司有限。此处所包含的文档贡献均为各自所有者的版权。所提供的文档受GNU自由文档许可证版本1.3的条款约束,由自由软件基金会发布。Qt及其相关标志为芬兰的Qt公司及其它世界各地的商标。所有其他商标均为各自所有者的财产。