天天看点

Qt 6.2 中 QML 工具有哪些新功能?

QML 工具是发展最快的领域之一,自 Qt 5.15 以来添加了大量新功能。在这里,我们将展示静态分析和格式化 QML 领域的进展和未来计划。

【Qt开发主流库:Qtitan组件集】

  • QtitanRibbon| 下载试用: 遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart | 下载试用 : 是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。并且支持所有主要的桌面操作系统。
  • QtitanDataGrid| 下载试用 : 适用于Qt的商业化DataGrid 组件,使得表格数据可以直接面向终端用户完全集成了QtDesigner,极易适应其他相似开发环境,保证100%兼容Qt GUI。

qmlint

qmlint 自从在 Qt 5.4 中引入以来已经发展了很多。它最初是一个简单的语法检查器。从那时起,它获得了警告不合格访问、“with”语句和信号注入以及其他各种违反最佳实践的能力。除了性能大幅提升之外,这里仅介绍 qmllint 中的一些新功能:

CMake qmlint 目标

在 Qt 6.2 中,如果您使用新的 QML 模块 CMake API,您将始终拥有${TARGETNAME}_qmllint模块的目标。这意味着您可以调用 qmllint 而不必担心导入路径或 linting 所有文件,因为这一切都将由目标自动处理。

在接下来的几周内,将在一系列博客文章中提供有关 QML 模块 API 的更多详细信息。

弃用警告

您现在可以将组件和属性标记为已弃用,这在 C++ 中已经存在很长时间了:

import QtQuick  Text {      @Deprecated { reason: "Use newProperty instead!" }      property int oldProperty      property int newProperty      Component.onCompleted: console.log(oldProperty);  // Warning: XY.qml:8:40: Property "oldProperty" is deprecated (Reason: Use newProperty instead!)  }      

这将使您更容易就公共 API 中的更改进行交流。

通过类别切换警告

您现在可以按类别禁用警告,例如默认情况下 qmllint 会通知您有关未使用的导入:

import QtQuick  import QtQuick3D // Info: DEM.qml:2:1: Unused import at DEM.qml:2:1  Text {      id: textElement      text: "Hello world!"      anchors.centerIn: parent  }
      

如果您愿意,现在可以通过传递--unused-imports disable. 或者,您可以使用 将这个信息性消息变成一个完整的警告--unused-imports warning。在这种情况下,与所有警告一样,未使用的导入警告将使 qmllint 返回退出代码 1 ;这将导致使用该工具的任何 CI 或预提交挂钩失败。有关qmllint --help警告类别的完整列表,请参阅 的输出。

通过设置文件配置 qmlint

除了能够通过命令行提供选项之外,qmlint 现在还可以使用设置文件进行配置。这些工作类似于其他 linter 配置文件。

这对于使您的项目准备好在 CI 中使用特别有用。

通过评论禁用警告

有时您可能无法立即修复警告,但会发现它在其他地方很有用。因此,我们允许您逐行禁用警告:

import QtQuick  Item {     width: 50     // This is an unqualified access     height: appWindow.height // qmllint disable unqualified     // ...  }  
      

持续集成和预提交挂钩

qmlint 也可以传递--json选项,该选项将使工具以机器可读的格式输出其警告,这对于集成到 CI 和预提交挂钩非常有用。例如,这里有一个应用程序,其中 qmlint 的输出用于在 GitHub 上生成自动代码审查:

未来的计划

即使现在关于 qmllint 的工作仍在进行中,而且 qmllint 将在 Qt 6.3 中大大改进类型检查和更多警告类别。我们还计划使 qmlint 更具可扩展性,以便用户能够根据其项目的特定需求生成自己的警告。

格式

我们使用 QML 来创建漂亮的 GUI,QML 可以用漂亮简洁的方式表达我们想要的东西。IDE/编辑器(例如 Qt Creator)可以帮助我们保持所有代码缩进,以便阅读和查看。有时虽然人们只想从命令行重新格式化它,并获得一个格式良好且可读的 QML 文件。

qmlformat就是为了那个。它重新格式化您的文件,正确缩进它们,并重新格式化 javascript 表达式以使它们漂亮:)。虽然我们在自己的文件上广泛测试了该工具,但我们知道可能会发生错误。作为额外的预防措施,qmlformat 验证重新格式化输出的语义结构是否与源文件的语义结构匹配。

这意味着不能重新格式化有小错误的文件。这并不总是人们想要的:也许你想要让它成形以实际修复它。因此,如果可以解析文件,-f/--force命令行选项将禁用所有检查,并重新格式化文件。

默认情况下qmlformat,QML 对象属性会完全按照您编写它们的顺序保留。传递-n/--normalize的对象属性根据我们的编码约定中规定的规则重新排序。此选项对于将文件保持为标准化格式以及在比较文件时特别有用。

qmldom

qmlformat 内部使用 qmldom,QML 作为树的内部表示,包含导入、qml 对象、属性定义和绑定。这种表示可以被编辑,每个元素都可以被唯一标识,并且可以以线程安全的方式更新。QML Design Studio 将在内部使用它来编辑 qml 文件,而无需处理更繁琐的 AST。它也是我们正在研究的语言服务器协议实现的基础,使所有新的工具改进在您选择的 IDE 中可用。

冒险家已经可以使用以下命令可视化这个内部结构,目前我们不提供任何稳定性保证:

qmldom --dump <MyQmlFile>        

这将返回 QML 文件中包含的主要内容的 json 描述,包括诸如弃用之类的注释。

====================================================

Qt技术交流群现已开通,QQ搜索群号“765444821”或者扫描下方二维码即可加入

继续阅读