翻譯|行業(yè)資訊|編輯:鮑佳佳|2021-09-06 10:01:06.500|閱讀 187 次
概述:QML 工具是發(fā)展最快的領(lǐng)域之一,自 Qt 5.15 以來添加了大量新功能。在這里,我們將展示靜態(tài)分析和格式化 QML 領(lǐng)域的進(jìn)展和未來計(jì)劃。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
【Qt開發(fā)主流庫:Qtitan組件集】
QML 工具是發(fā)展最快的領(lǐng)域之一,自 Qt 5.15 以來添加了大量新功能。在這里,我們將展示靜態(tài)分析和格式化 QML 領(lǐng)域的進(jìn)展和未來計(jì)劃。
qmlint 自從在 Qt 5.4 中引入以來已經(jīng)發(fā)展了很多。它最初是一個(gè)簡單的語法檢查器。從那時(shí)起,它獲得了警告不合格訪問、“with”語句和信號注入以及其他各種違反最佳實(shí)踐的能力。除了性能大幅提升之外,這里僅介紹 qmllint 中的一些新功能:
在 Qt 6.2 中,如果您使用新的 QML 模塊 CMake API,您將始終擁有${TARGETNAME}_qmllint模塊的目標(biāo)。這意味著您可以調(diào)用 qmllint 而不必?fù)?dān)心導(dǎo)入路徑或 linting 所有文件,因?yàn)檫@一切都將由目標(biāo)自動(dòng)處理。
在接下來的幾周內(nèi),將在一系列博客文章中提供有關(guān) QML 模塊 API 的更多詳細(xì)信息。
您現(xiàn)在可以將組件和屬性標(biāo)記為已棄用,這在 C++ 中已經(jīng)存在很長時(shí)間了:
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 中的更改進(jìn)行交流。
您現(xiàn)在可以按類別禁用警告,例如默認(rèn)情況下 qmllint 會(huì)通知您有關(guān)未使用的導(dǎo)入:
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 }
如果您愿意,現(xiàn)在可以通過傳遞--unused-imports disable. 或者,您可以使用 將這個(gè)信息性消息變成一個(gè)完整的警告--unused-imports warning。在這種情況下,與所有警告一樣,未使用的導(dǎo)入警告將使 qmllint 返回退出代碼 1 ;這將導(dǎo)致使用該工具的任何 CI 或預(yù)提交掛鉤失敗。有關(guān)qmllint --help警告類別的完整列表,請參閱 的輸出。
除了能夠通過命令行提供選項(xiàng)之外,qmlint 現(xiàn)在還可以使用設(shè)置文件進(jìn)行配置。這些工作類似于其他 linter 配置文件。
這對于使您的項(xiàng)目準(zhǔn)備好在 CI 中使用特別有用。
有時(shí)您可能無法立即修復(fù)警告,但會(huì)發(fā)現(xiàn)它在其他地方很有用。因此,我們允許您逐行禁用警告:
import QtQuick Item { width: 50 // This is an unqualified access height: appWindow.height // qmllint disable unqualified // ... }
qmlint 也可以傳遞--json選項(xiàng),該選項(xiàng)將使工具以機(jī)器可讀的格式輸出其警告,這對于集成到 CI 和預(yù)提交掛鉤非常有用。例如,這里有一個(gè)應(yīng)用程序,其中 qmlint 的輸出用于在 GitHub 上生成自動(dòng)代碼審查:
即使現(xiàn)在關(guān)于 qmllint 的工作仍在進(jìn)行中,而且 qmllint 將在 Qt 6.3 中大大改進(jìn)類型檢查和更多警告類別。我們還計(jì)劃使 qmlint 更具可擴(kuò)展性,以便用戶能夠根據(jù)其項(xiàng)目的特定需求生成自己的警告。
我們使用 QML 來創(chuàng)建漂亮的 GUI,QML 可以用漂亮簡潔的方式表達(dá)我們想要的東西。IDE/編輯器(例如 Qt Creator)可以幫助我們保持所有代碼縮進(jìn),以便閱讀和查看。有時(shí)雖然人們只想從命令行重新格式化它,并獲得一個(gè)格式良好且可讀的 QML 文件。
qmlformat就是為了那個(gè)。它重新格式化您的文件,正確縮進(jìn)它們,并重新格式化 javascript 表達(dá)式以使它們漂亮:)。雖然我們在自己的文件上廣泛測試了該工具,但我們知道可能會(huì)發(fā)生錯(cuò)誤。作為額外的預(yù)防措施,qmlformat 驗(yàn)證重新格式化輸出的語義結(jié)構(gòu)是否與源文件的語義結(jié)構(gòu)匹配。
這意味著不能重新格式化有小錯(cuò)誤的文件。這并不總是人們想要的:也許你想要讓它成形以實(shí)際修復(fù)它。因此,如果可以解析文件,-f/--force命令行選項(xiàng)將禁用所有檢查,并重新格式化文件。
默認(rèn)情況下qmlformat,QML 對象屬性會(huì)完全按照您編寫它們的順序保留。傳遞-n/--normalize的對象屬性根據(jù)我們的編碼約定中規(guī)定的規(guī)則重新排序。此選項(xiàng)對于將文件保持為標(biāo)準(zhǔn)化格式以及在比較文件時(shí)特別有用。
qmlformat 內(nèi)部使用 qmldom,QML 作為樹的內(nèi)部表示,包含導(dǎo)入、qml 對象、屬性定義和綁定。這種表示可以被編輯,每個(gè)元素都可以被唯一標(biāo)識,并且可以以線程安全的方式更新。QML Design Studio 將在內(nèi)部使用它來編輯 qml 文件,而無需處理更繁瑣的 AST。它也是我們正在研究的語言服務(wù)器協(xié)議實(shí)現(xiàn)的基礎(chǔ),使所有新的工具改進(jìn)在您選擇的 IDE 中可用。
冒險(xiǎn)家已經(jīng)可以使用以下命令可視化這個(gè)內(nèi)部結(jié)構(gòu),目前我們不提供任何穩(wěn)定性保證:
qmldom --dump <MyQmlFile>
這將返回 QML 文件中包含的主要內(nèi)容的 json 描述,包括諸如棄用之類的注釋。
====================================================
想要了解或購買Qt正版授權(quán)的朋友,歡迎
Qt技術(shù)交流群現(xiàn)已開通,QQ搜索群號“765444821”或者掃描下方二維碼即可加入
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: