如何找到所有 QML 模块的最新版本

How to find the latest versions of all QML modules

通常我的 QML 文件以 import QtQuick 2.4 和其他导入开头。我怎样才能知道哪个是导入模块的最新版本,而不必通过类型和构建来猜测?

你基本上不需要知道。通过导入特定版本,您只是声明您不需要任何潜在更新版本的附加功能。这并不意味着如果有可用的更新版本,您将不会使用它 - 它只是意味着您的代码将拒绝 运行 如果只有 版本比您需要的已存在。

因此,如果您碰巧使用较新版本的功能(成员、类 等),您应该只更改导入的模块版本。就这样。而且您将确切地知道您需要什么版本,因为您正在使用您在文档中阅读的功能。该文档将说明它适用于哪个模块版本。

您正在使用的 Qt 中给定 Qt Quick 模块的文档将说明这一点 - 不需要发行说明。

QML 模块版本信息可以在名为 plugins.qmltypes 的文件中找到。 这些文件使用 JSON 来存储信息(据我所知)。 在这些文件中,Qt 使用“exports”说明符来导出模块的名称和版本。

示例: 导出:["QtQuick/Accessible 2.0"]

该示例显示了 QtQuick.Accessible 模块的版本。 plugins.qmltypes 存储在与基本级别模块同名的目录中。 在示例的情况下,这将是 QtQuick。 基础级模块分组在名为 qml 的目录下。 这“通常”位于名为 qtx(在某些情况下为 Qt)的目录中。 其中 x 是已安装的 Qt 主要版本(在我的例子中是 qt5)。 这意味着 plugins.qmltypes 的路径看起来像这样:

/qt5/qml/QtQuick/plugins.qmltypes

我解释这个自下而上的原因是路径的其余部分取决于您安装 Qt 的方式:

Package manager (portage) amd64 install path:
/usr/lib64/qt5/qml/

pip PySide6 install path:
~/.local/lib/python3.9/site-packages/PySide6/Qt/qml/

pip PyQt6 install path:
~/.local/lib/python3.9/site-packages/PyQt6/Qt6/qml
~/.local/lib/python3.9/site-packages/PyQt6/Qt6/qml

Package manager (apt) aarch64 install path:
/usr/lib64/aarch64-{forgot this part}-/qt5/qml/

我通过以下方式批量计算版本:

grep -r "exports:.*\]" <insert install/OS dependent path>/qml/* | less

这不会抓取分布在多行思想上的多个导出。

由于 QML 有 2 个主要版本,当您有疑问时可以导入版本 1.0 或 2.0。