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