【问题标题】:How to find the latest versions of all QML modules如何找到所有 QML 模块的最新版本
【发布时间】:2015-11-07 17:41:51
【问题描述】:

通常我的 QML 文件以 import QtQuick 2.4 和其他导入开头。我如何知道导入模块的最新版本,而无需通过类型和构建来猜测?

【问题讨论】:

  • 阅读发行说明。
  • 我想真正的问题是:你为什么认为你需要知道它,因为很可能是出于错误的原因......
  • 我觉得这是一个很好的问题,之前也有人提出过。一直在谈论添加在导入时省略版本号并让它导入最新版本的功能,我认为这是一个好主意。当几乎总是无关紧要时,必须去文档查看要导入的版本很烦人。
  • QTBUG-38304 有这个建议,虽然它有点冗长,如果只是“如果版本号被省略,QQmlEngine 应该导入模块的最新可用版本”会是一个更好的建议。

标签: qt qml qt5 qtquick2


【解决方案1】:

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

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

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

【讨论】:

  • 如何在文档中找到模块版本?例如,查看 QtQuick Row.padding 文档,它声明该属性从 Qt 5.6 开始可用,但是 QtQuick 的哪个版本对应于 Qt 5.6?更新:我看到当前/最新版本的 Qt 的文档页面顶部有一个导入语句,但我想查看 Qt 版本和模块版本之间的对应关系表(是否存在?)
  • @DavidJ 参见 Versions 部分 here
  • @rsht 表格不完整。
  • 这是一个错误的答案,为什么会被接受?遇到这种情况的任何人都想了解如何正确地对他们的导入进行版本控制,最有可能的是,他们可以针对旧系统(例如Ubuntu 16.04)。这里有两种实用的方法:(1)了解在哪些版本中添加了哪些功能或(2)了解目标平台支持哪些版本。在这两种情况下,“您基本上不必知道”都不正确。
  • @notlesh 当您使用某个功能时,Qt 文档会准确说明您需要的导入版本。如果该版本在某个平台上不可用,您的应用程序根本无法在那里运行(如果没有自定义 Qt)。如果您需要查看任何特定 Qt 版本中可用的内容,请查看该版本的文档并对其进行设计。您可以在发行版的资源(包列表等)中找到默认的 Qt 版本。
【解决方案2】:

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 版本。

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多