天天看點

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”或者掃描下方二維碼即可加入

繼續閱讀