本文翻譯自Qt 6.2 LTS Released
原文作者:Qt 公司首席技術(shù)官及Qt開源項(xiàng)目首席維護(hù)者Lars Knoll
校審:Sam Wong
我很高興地宣布 Qt 6.2 的正式發(fā)布。它是自我們開始邁向全新Qt主要版本以來,一直在努力的版本。Qt 6.2得益于我們?yōu)镼t 6所做的所有架構(gòu)升級(jí),并包含了Qt 5.15中幾乎所有深受喜愛的附加模塊。

Qt 6.2 也是 Qt 公司為商業(yè)版客戶提供的Qt 6系列中第一個(gè)長(zhǎng)周期支持版。
在我們升級(jí) 到Qt 6的計(jì)劃中,我們首先關(guān)注 Qt 的核心,為了能在未來幾年保持競(jìng)爭(zhēng)力而做了架構(gòu)級(jí)別的改變。但這一投入也意味著我們必須在發(fā)布 Qt 6.0 時(shí)對(duì)所支持的附加模塊做出妥協(xié)。因此,盡管 Qt 6.0 比 Qt 5.15 更好、更先進(jìn),但它確實(shí)缺乏 Qt 5.15 提供的某些功能。在 Qt 6.2 中,我們縮小了差距,并包含了 Qt 5.15 中的所有常用功能以及為 Qt 6 添加的新功能。
隨著 Qt 6.2 的發(fā)布,幾乎所有Qt用戶都應(yīng)能將其代碼從 Qt 5 遷移到 Qt 6。我們已將自己的工具實(shí)現(xiàn)了遷移。也就是說,Qt Design Studio 2.2 和即將發(fā)布的 Qt Creator 6 beta 版都基于 Qt 6.2 長(zhǎng)周期支持版。
除了增加缺失的功能外,Qt 6.2 還專注于提高穩(wěn)定性、性能和開發(fā)者的生活質(zhì)量。
在詳細(xì)了解 6.2 新功能之前,讓我們回顧一下 Qt 6 的主要變化。
Qt 6 中架構(gòu)級(jí)別的更改
我們對(duì) Qt 6進(jìn)行了一些更廣泛的架構(gòu)更改,并以此構(gòu)建 Qt 6.2 以及未來版本。這些變化包括:
? 利用 C++17?? 開發(fā)Qt 6 時(shí),我們希望建立在現(xiàn)代 C++ 標(biāo)準(zhǔn)之上。C++17 是當(dāng)時(shí)的最新版本,而 Qt 6 現(xiàn)在依賴于 C++17 兼容編譯器。這使得我們可以清理和改進(jìn)我們的代碼庫,并能為用戶提供更現(xiàn)代的 API。
? 在處理大型數(shù)據(jù)集和性能方面改進(jìn)了低級(jí)容器類。
? 下一代 QML?? 我們已開始更努力地更新 QML 語言,使其更安全、更易用。Qt 6.0 – 6.2奠定了基礎(chǔ),但這種努力將在整個(gè) Qt 6 系列中繼續(xù)。
? 將屬性綁定引入 C++ ? 屬性綁定是使QML 取得成功的概念之一。在 Qt 6 中,我們已經(jīng)在 C++ 中實(shí)現(xiàn)了這個(gè)概念。
? 新的圖形架構(gòu)? Qt 6 在如何處理與底層操作系統(tǒng)的 API集成方面采用了全新的架構(gòu)。由于新的渲染硬件接口(RHI),Qt 6現(xiàn)在默認(rèn)使用每個(gè)系統(tǒng)上可用的最佳圖形API,顯著提高了兼容性,尤其是在桌面和移動(dòng)操作系統(tǒng)(如 Windows 和 macOS 以及 iOS)上。
? Qt Quick統(tǒng)一的 2D和3D?? Qt Quick 一直是構(gòu)建動(dòng)畫和流暢 2D 用戶界面的框架。我們?cè)赒t 6中還簡(jiǎn)化了將 3D 內(nèi)容集成到基于 QML 的應(yīng)用程序流程。深度集成使得在任何級(jí)別混合 2D 和 3D 內(nèi)容都變得很容易,同時(shí)獲得系統(tǒng)的最大性能。
? CMake 構(gòu)建系統(tǒng)? 從Qt 6開始,我們將構(gòu)建系統(tǒng)從 qmake 改為 cmake,這是當(dāng)今基于C++應(yīng)用程序的標(biāo)準(zhǔn)構(gòu)建系統(tǒng)。雖然我們?nèi)詫⒃赒t 6整個(gè)生命周期內(nèi)支持 qmake,但初步用戶報(bào)告表明切換到 cmake 后有顯著改進(jìn)。
盡管有這些變化,將您現(xiàn)有的代碼庫移植到 Qt 6 應(yīng)該很簡(jiǎn)單。您將在本文中讀到更多相關(guān)信息。
現(xiàn)在讓我們仔細(xì)看看 Qt 6.2 中的新功能。
添加的模塊
開發(fā) Qt 6.2 的主要工作之一是重新添加我們?cè)?Qt 6.0 中遺漏的所有模塊和功能。除了極少數(shù)例外,Qt 5.15 支持的所有模塊現(xiàn)在也在Qt 6.2中得到支持。
在 Qt 6.2 中,我們添加了對(duì)以下模塊的支持(在 Qt 6.1 中已有的模塊之上):
- Qt Bluetooth
- Qt Multimedia
- Qt NFC?
- Qt Positioning
- Qt Quick Dialogs
- Qt RemoteObjects
- Qt Sensors
- Qt SerialBus
- Qt SerialPort
- Qt WebChannel
- Qt WebEngine
- Qt WebSockets
- Qt WebView
這些模塊的 API 主要向后兼容 Qt 5,并且在移植到 Qt 6 時(shí)只需要對(duì)用戶代碼進(jìn)行微調(diào)。
Qt 6.2 支持的完整模塊列表(https://doc.qt.io/qt-6/qtmodules.html)可以在我們的在線文檔中找到。
Qt 6.2 中的新功能
除了從 Qt 5 帶來的許多模塊,我們還在 6.2 中引入大量的新特性(https://wiki.qt.io/New_Features_in_Qt_6.2)和功能。我們來看一下。
Qt Quick 3D
Qt Quick 3D得到了一些很酷的新功能,現(xiàn)在支持實(shí)例化渲染,允許您用不同變換渲染大量相同的對(duì)象。我們還添加了一個(gè)用于向場(chǎng)景添加 3D 微粒效果的 API。
輸入處理已得到改進(jìn),我們現(xiàn)在可以為嵌入在 3D 場(chǎng)景中的 2D 項(xiàng)目正確創(chuàng)建 Qt Quick 輸入事件。我們還添加了一個(gè)從場(chǎng)景任意點(diǎn)進(jìn)行基于光線的拾取的API。
QML工具
Qt 6.2 對(duì) QML 工具進(jìn)行了較大改進(jìn)。我們現(xiàn)在有一個(gè)公共CMake API,它極大地簡(jiǎn)化了創(chuàng)建您自己 QML 模塊的過程。
QML linter (qmlint) 是一種工具,用于檢查 QML 源代碼的最佳實(shí)踐、潛在的編碼和性能問題,并幫助編寫更易于維護(hù)的 QML。該工具經(jīng)歷了巨變,現(xiàn)在可以通過配置文件在命令行級(jí)別進(jìn)行完全配置,甚至可以對(duì)QML文件本身中的單個(gè)塊進(jìn)行配置。此外,它現(xiàn)在可以生成 JSON 輸出以簡(jiǎn)化與其他工具或自動(dòng)化系統(tǒng)的集成。
QML 格式化程序 (qmlformat) 現(xiàn)在使用 QML dom 庫,大大改進(jìn)了生成的輸出。
Qt Multimedia
Qt Multimedia 在 Qt 6 中經(jīng)歷了巨大變化。它是我們?cè)?Qt 5 生命周期中不滿意的 API 之一。因此,我們退后一步,對(duì)模塊做了一些更廣泛的API和架構(gòu)更改,而沒太考慮向后兼容性。
盡管如此,從Qt 5 中的 Qt Multimedia移植到 Qt 6 應(yīng)該相對(duì)簡(jiǎn)單。
Qt 6 中的 Qt Multimedia確實(shí)支持一些我們從未在Qt 5中正確支持且被多次要求增加的功能,包括支持字幕、回放時(shí)的語言選擇以及可配置的媒體捕獲設(shè)置。
內(nèi)部架構(gòu)已經(jīng)過清理,不再像 Qt 5那樣通過公共 API 公開。這使我們能夠更快地修復(fù)bug,并且使添加新功能變得更加容易。
然而,由于這些巨大的變化,該模塊在實(shí)現(xiàn)中可能存在相當(dāng)多的bugs。但是,我們相信多媒體是必不可少的一項(xiàng)功能,將在 Qt 6.2 中完全支持該模塊。
因此,我們將在補(bǔ)丁級(jí)版本的常規(guī)提交策略上有所偏離,如果需要修復(fù)較大的問題,可能會(huì)添加一些較小的 API。
此外,在即將發(fā)布的補(bǔ)丁級(jí)版本中,我們將盡快努力修復(fù)任何報(bào)告的錯(cuò)誤。
較小的一些改進(jìn)
幾乎所有其他模塊都有許多較小的 API 添加和改進(jìn)。
我們移植了許多 API來利用新的屬性系統(tǒng),以便您使用 C++中的屬性綁定。這項(xiàng)工作尚未完成,我們將在未來的版本中繼續(xù)。
我們還修復(fù)了許多 API 缺點(diǎn)和不同地方缺失的功能。僅舉幾個(gè)例子:
??? ?Qt Charts 增加了提高便利性并方便定制的新API。
??? ?為 QImage 添加了浮點(diǎn)圖像格式。
??? ?QByteArray::number() 現(xiàn)在可以正確處理不等于 10基數(shù)的負(fù)值。
??? ?QLockFile 現(xiàn)在具有采用 std::chrono 的重載
??? ?Qt Network 支持多個(gè)可以在運(yùn)行時(shí)共存的 SSL 后端。
詳細(xì)信息,請(qǐng)查看我們 wiki 中的新功能頁面(https://wiki.qt.io/New_Features_in_Qt_6.2)。
Qt Creator 和 Qt Design Studio
我們?yōu)镼t Creator 和 Qt Design Studio 也做了大量工作,以確保它們?yōu)?Qt 6.2 提供一流的支持。Qt Creator 5 包含用Qt 6.2 開發(fā)所需的一切。
今天我們還發(fā)布了全新版本的 Qt Design Studio。Qt Design Studio 2.2 基于 Qt 6.2,為在一個(gè)圖形工具中創(chuàng)建基于Qt Quick和Qt Quick 3D的用戶界面帶來了極大支持。您可以在目標(biāo)硬件上輕松測(cè)試這些功能,無論是臺(tái)式機(jī)、移動(dòng)設(shè)備還是嵌入式設(shè)備。詳細(xì)信息,請(qǐng)查看有關(guān) Qt Design Studio 2.2 的博文(https://www.qt.io/blog/qt-design-studio-2.2-released)。
全新平臺(tái)
我們?cè)赒t 6.2上做了很多工作來改進(jìn)對(duì)當(dāng)前支持平臺(tái)的支持,包括臺(tái)式機(jī)和移動(dòng)端,例如,改進(jìn)我們對(duì) HighDPI 渲染的支持和在 iOS 上添加 NFC 后端。

除此以外,Qt 6.2 大幅擴(kuò)展了支持平臺(tái)的范圍:
Qt 6.2 完全支持 Apple Silicon 上的 macOS。Qt 現(xiàn)在可以輕松創(chuàng)建通用二進(jìn)制文件,并在 Intel 和 Apple Silicon 上為 macOS 進(jìn)行開發(fā)。當(dāng)然,該版本也在我們的 CI 系統(tǒng)中進(jìn)行了全面測(cè)試。Qt 應(yīng)用程序一貫?zāi)茉贏pple芯片的 Rosetta 層上運(yùn)行,但 Qt 6.2 現(xiàn)在全面支持在 Apple原生芯片上運(yùn)行。
Qt 6.2 還恢復(fù)了對(duì) INTEGRITY 和 QNX 實(shí)時(shí)操作系統(tǒng)的支持。支持需要C++17工具鏈和最新版本的操作系統(tǒng)。QNX 的最低要求是 7.1 版,在 INTEGRITY 上,我們支持 19.0.13 版。
針對(duì) Qt 6.2 的 webOS 驗(yàn)證也已完成,以進(jìn)一步加強(qiáng) Qt 對(duì) webOS 的承諾。
支持Windows 11的工作正在進(jìn)行中,我們希望能夠在6.2補(bǔ)丁級(jí)版本中為其提供全面支持。Qt 6.2還提供了對(duì)ARM硬件上的Windows的技術(shù)預(yù)覽版支持。
最后,我們改進(jìn)了對(duì)WebAssembly 的支持,在 Qt 6.2 中以技術(shù)預(yù)覽版發(fā)布。
從 Qt 5 移植
在開發(fā) Qt 6 時(shí),與 Qt 5 的源代碼兼容性一直是我們工作的關(guān)鍵部分。有時(shí)我們不得不在某種程度上打破這種兼容性,以進(jìn)行必要的架構(gòu)更改,或?yàn)槲覀儙砭薮蟮男阅軆?yōu)勢(shì)。
在大多數(shù)情況下,從 Qt 5 移植到 Qt 6 應(yīng)該很簡(jiǎn)單。Qt 6 移植指南(https://doc.qt.io/qt-6/portingguide.html)列舉了所需的步驟,并提供了更多信息。您還可以從我們的合作伙伴或我們的顧問(https://www.qt.io/zh-cn/qt-consulting)獲得移植幫助。
移植到 Qt 6 的典型步驟是:
??? ?檢查您是否使用了受支持的編譯器和平臺(tái)版本
??? ?首先在 Qt 6 模式下使用 Qt 5.15 編譯(使用 QT_DISABLE_DEPRECATED_BEFORE 宏)
??? ?然后用 Qt 6.x 編譯 —— 如果需要,在移植階段利用兼容性模塊
有了這些,您就可以在 Qt 6 上運(yùn)行應(yīng)用程序,并可以開始使用它提供的所有新特性和功能。例如,如果您的應(yīng)用程序使用 QML,請(qǐng)運(yùn)行 qmlint 工具,并修復(fù)它給出的警告。

這里,我還想介紹一本有關(guān) QML 和 Qt 6 的電子書(https://www.qt.io/product/qt6/qml-book)。這是QML入門或了解更多信息的絕佳資源。我們要感謝主要作者, Johan Thelin、Jürgen Ryanell 和 Cyril Lorquet,以及參與其中的社區(qū)成員。該項(xiàng)目由 Qt 公司贊助,這是一個(gè)持續(xù)更新的動(dòng)態(tài)文檔。歡迎大家給與項(xiàng)目好評(píng)和反饋。
今天就試試吧
在向您提供下載 Qt 6.2鏈接前,我想向您推薦閱讀Qt 6.2 的發(fā)行說明(https://code.qt.io/cgit/qt/qtreleasenotes.git/about/qt/6.2.0/release-note.md),其中包含眾多自 Qt 6.1發(fā)布以來我們所做的更改詳細(xì)信息,包括已修復(fù)bugs的完整列表。
它還包含了所有為 Qt 6.2 貢獻(xiàn)補(bǔ)丁的人的完整列表。列表太長(zhǎng),無法在此處重現(xiàn),但我要感謝所有幫助和實(shí)現(xiàn) Qt 6.2的人們。
如果您已安裝了 Qt,那么獲得 Qt 6.2 的最簡(jiǎn)單方法是通過在線安裝程序。如果沒有,您可以從您的 Qt 帳戶或通過我們的網(wǎng)頁下載。
希望您喜歡 Qt 6.2。讓我們知道使用它的進(jìn)展,并報(bào)告您可能發(fā)現(xiàn)的任何bug,以便在即將發(fā)布的補(bǔ)丁版本中使 Qt 6.2 變得更好。
請(qǐng)繼續(xù)關(guān)注Qt 6
最后但同樣重要的是,這里有一個(gè)關(guān)于在不久的將來還有哪些的快速更新。一個(gè)跟蹤并了解正在發(fā)生的事情的好地方是Qt 6獨(dú)立頁面。
Qt World Summit 2021將近,我想邀請(qǐng)您的加入。您將從我們團(tuán)隊(duì)、我們的客戶和 Qt 生態(tài)系統(tǒng)成員那里面對(duì)面交流,從Qt 的最新發(fā)展中獲得靈感。您可以在https://www.qt.io/zh-cn/qtws21_china報(bào)名中國站活動(dòng)。
謝謝大家, Qt 公司希望您會(huì)喜歡Qt 6.2長(zhǎng)周期支持版!
(文章來源公眾號(hào):QT軟件)

首頁 > 新聞資訊
