Qt6.2發佈(含項目代碼升級到Qt6吐血經驗總結)

一、前言

升級到Qt6吐血經驗總結 https://gitee.com/feiyangqingyun/qtkaifajingyan#二升級到qt6

我很高興地宣佈 Qt 6.2 的發佈。Qt 6.2 是我們一直在努力的版本,因爲我們開始邁向 Qt 的新主要版本。它受益於我們爲 Qt 6 所做的所有架構升級,並且基本上包括您在 Qt 5.15 中喜歡的所有附加模塊。

Qt 6.2 也是 Qt 6 的第一個版本,Qt 公司將爲 Qt 商業客戶提供長期支持。

我們在遷移到 Qt 6 時的計劃是首先關注 Qt 的核心,然後進行我們認爲在未來幾年保持 Qt 競爭力所需的架構更改。但這種關注也意味着我們不得不在發佈 Qt 6.0時對我們支持的附加組件做出妥協 。因此,儘管 Qt 6.0 比 Qt 5.15 更好、更先進,但它確實缺少 Qt 5.15 提供的一些功能。在 Qt 6.2 中,我們縮小了這一差距,幷包含了 Qt 5.15 中的所有常用功能以及爲 Qt 6 添加的新功能。

隨着 Qt 6.2 的發佈,幾乎我們所有的用戶都應該能夠將他們的代碼從 Qt 5 遷移到 Qt 6。我們已經使用自己的工具實現了這一點。也就是說,Qt Design Studio 2.2 和即將發佈的 Qt Creator 6 beta 都是基於 Qt 6.2 LTS。

除了添加缺失的功能外,Qt 6.2 還專注於提高穩定性、性能和開發人員的生活質量。

在詳細瞭解 6.2 中的新功能之前,讓我們回顧一下 Qt 6 中的一些主要變化。

二、Qt 6 的架構變化

我們在 Qt 6 中進行了一些更廣泛的架構更改,我們現在正在構建 Qt 6.2 和任何未來版本。

  • 利用 C++17 在處理 Qt 6 時,我們希望建立在現代 C++ 標準之上。C++17 是最新發布的版本,而 Qt 6 現在依賴於 C++17 兼容編譯器。這使得我們可以清理和改進我們的代碼庫,併爲我們的用戶提供更現代的 API。
  • 在處理大型數據集和性能方面改進了我們的低級容器類。
  • 下一代 QML 我們已經開始更加努力地更新 QML 語言,使其在未來更安全、更易於使用。Qt 6.0 – 6.2 在這裏奠定了基礎,但這種持續的努力將在整個 Qt 6 系列中繼續進行。
  • 將屬性綁定引入 C++ 屬性綁定是使 QML 如此成功的概念之一。在 Qt 6 中,我們一直在 C++ 中提供該概念 。
  • 新的圖形架構 Qt 6 在如何處理與底層操作系統 API 的集成方面採用了 全新的架構。得益於新的渲染硬件接口 (RHI),Qt 6 現在默認使用每個系統上可用的最佳圖形 API,顯着提高了兼容性——尤其是在桌面和移動操作系統(如 Windows 和 macOS 以及 iOS)上。
  • Qt Quick 的統一 2D 和 3D Qt Quick 一直是構建動畫和流暢的 2D 用戶界面的框架。使用 Qt 6,我們也簡化了將 3D 內容集成到基於 QML 的應用程序的過程。深度集成使得在任何級別混合 2D 和 3D 內容變得微不足道,同時從系統中獲得最大性能。
  • CMake 構建系統 在 Qt 6 中,我們將構建系統從 qmake切換到 cmake,這是當今基於 C++ 的應用程序的標準構建系統。雖然在 Qt 6 的整個生命週期內仍支持 qmake,但初步用戶報告表明切換到 cmake 後有顯着改進。

三、添加模塊

開發 Qt 6.2 的主要工作之一是重新添加我們在 Qt 6.0 中遺漏的所有模塊和功能。除了極少數例外,Qt 5.15 支持的所有模塊現在也支持 Qt 6.2。

在 Qt 6.2 中,我們添加了對以下附加模塊的支持(在 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 時只需要對用戶代碼進行少量調整。

Qt 6.2 支持的 完整模塊列表 可以在我們的文檔中找到 。

三、Qt 6.2 中的新功能

除了我們從 Qt 5 帶來的許多模塊之外,我們 在 6.2 中還有大量的 新特性和功能。我們來看一下。

(一)、Qt 快速 3D

Qt Quick 3D 獲得了一些很酷的新功能,現在支持 實例化渲染,允許您使用不同的變換渲染大量相同的對象。我們還添加了一個新的 API,用於向 場景添加 3D 粒子效果。

輸入處理已得到改進,我們現在可以爲嵌入在 3D 場景中的 2D 項目正確創建 Qt Quick 輸入事件。我們還添加了一個新的 API,用於從場景中的任意點進行基於光線的拾取。

(二)、QML工具

Qt 6.2 對 QML 工具進行了較大改進。我們現在有一個公共的 CMake API ,它極大地簡化了創建您自己的 QML 模塊的過程。

QML linter (qmlint) 是一種工具,用於檢查 QML 源代碼的最佳實踐、潛在的編碼和性能問題,並幫助編寫更易於維護的 QML。該工具經歷了很大的變化,現在可以完全配置,無論是在命令行級別,還是通過配置文件,甚至是 QML 文件本身中的各個塊。此外,它現在可以生成 JSON 輸出以簡化與其他工具或自動化系統的集成。

QML 格式化程序 (qmlformat) 現在使用 QML dom 庫,大大改進了生成的輸出。

(三)、Qt多媒體

Qt 多媒體在 Qt 6 中發生了一些相當大的變化。它是我們在 Qt 5 的生命週期中不滿意的 API 之一。因此,我們退後一步,對 Qt 6 進行了一些更廣泛的 API 和架構更改。沒有過多考慮向後兼容性的模塊。

儘管如此,從 Qt 5 中的 Qt 多媒體移植到 Qt 6 應該相對簡單。

Qt 6 中的 Qt 多媒體確實支持一些我們在 Qt 5 中從未設法正確支持的高度要求的功能。示例包括播放的字幕和語言選擇支持以及媒體捕獲的可配置設置。

內部架構已經過清理,不再像 Qt 5 那樣通過公共 API 公開。這將使我們能夠更快地修復錯誤,並使將來添加新功能變得更加容易。您可以在有關 Qt 6 中的 Qt 多媒體的單獨博客文章中找到更多詳細信息。

然而,由於這些巨大的變化,該模塊仍然存在粗糙的邊緣,並且可能在實現中存在相當多的錯誤。但是,我們相信多媒體是一項必不可少的功能,我們將在 Qt 6.2 中完全支持該模塊。

因此,我們將在補丁級別版本的常規提交策略上有所偏離,如果需要修復較大的問題,可能會添加一些較小的 API。

此外,我們將努力在即將發佈的補丁級別版本中儘快修復任何報告的錯誤。

(四)、整個過程中的小改進

幾乎所有其他模塊都看到了許多較小的 API 添加和改進。

我們已經移植了許多 API 以利用新的屬性系統,以便您可以使用 C++ 中的屬性綁定。這項工作尚未完成,我們將在未來的版本中繼續。

我們還在各個地方修復了許多 API 缺點和缺失的功能。僅舉幾個例子:

  • Qt Charts 獲得了一些新的 API,以提高便利性並使事情更加可定製。
  • 我們爲 QImage 添加了浮點圖像格式。
  • QByteArray::number() 現在可以正確處理 10 以外的基數的負值。
  • QLockFile 現在具有采用 std::chrono 的重載
  • Qt Network 支持多個可以在運行時共存的 SSL 後端。

(五)、Qt Creator 和 Qt Design Studio

Qt Creator 和 Qt Design Studio 也做了大量工作,以確保它們爲 Qt 6.2 提供一流的支持。Qt Creator 5 包含您爲 Qt 6.2 開發所需的一切。

我們今天還發布了全新版本的 Qt Design Studio。Qt Design Studio 2.2 基於 Qt 6.2,極大地支持在一個圖形工具中創建基於 Qt Quick 和 Qt Quick 的 3D 用戶界面。您可以輕鬆地在目標硬件上測試這些,無論是臺式機、移動設備還是嵌入式設備。有關 更多詳細信息,請查看有關Qt Design Studio 2.2的單獨博客文章。

四、新平臺

對於 Qt 6.2,我們做了很多工作來改進我們對當前支持平臺的支持,包括桌面和移動端,例如,通過改進我們對 HighDPI 渲染的支持和在 iOS 上添加 NFC 後端。

最重要的是,Qt 6.2 大大擴展了支持平臺的範圍:

Qt 6.2 完全支持 Apple Silicon 上的 macOS。Qt 現在可以輕鬆創建通用二進制文件並在 Intel 和 Apple Silicon 上爲 macOS 進行開發。當然,該版本也在我們的 CI 系統中進行了全面測試。一直可以通過 Rosetta 層在 Apple 芯片上運行 Qt 應用程序,但 Qt 6.2 現在提供了在 Apple 芯片上本地運行的完整支持。

Qt 6.2 還恢復了對 INTEGRITY 和 QNX 實時操作系統的支持。支持需要 C++17 工具鏈和最新版本的操作系統。QNX 的最低要求是 7.1 版,在 INTEGRITY 上,我們支持 19.0.13 版。

針對 Qt 6.2 的 webOS 驗證也已完成,以進一步加強 Qt 對 webOS 的承諾。

有很多工作正在進行以支持 Windows 11,我們希望能夠在 6.2 補丁級別版本中爲其提供全面支持。Windows on ARM HW 也可作爲 Qt 6.2 的技術預覽版提供。

最後,我們做了進一步的工作來改進我們對 WebAssembly 的支持,它在 Qt 6.2 中作爲技術預覽提供支持。

Qt for Python 今天也發佈了,大家可以試一試。未來幾天將發佈一篇單獨的博客文章,重點介紹最新 Qt 6.2 更改中採用的所有功能。敬請關注!

五、從 Qt 5 移植

在開發 Qt 6 時,與 Qt 5 的源代碼兼容性一直是我們工作的關鍵部分。有一些地方我們不得不在某種程度上打破這種兼容性,以進行一些必需的架構更改或爲我們帶來一些巨大的性能優勢。

在大多數情況下,從 Qt 5 移植到 Qt 6 應該很簡單。在Qt的6移植指南 列出了所需要的步驟,並具有更多的信息。您還可以從我們的合作伙伴之一或我們的顧問那裏獲得移植幫助。

移植到 Qt 6 的典型步驟是:

  • 檢查您是否使用了受支持的編譯器和平臺版本
  • 首先在 Qt 6 模式下使用 Qt 5.15 編譯(使用 QT_DISABLE_DEPRECATED_BEFORE 宏)
  • 然後用 Qt 6.x 編譯 - 如果需要,在移植階段利用兼容性模塊

有了這些,您就可以在 Qt 6 上運行應用程序,並可以開始使用它提供的所有新特性和功能。例如,如果您的應用程序使用 QML,請運行 qmlint 工具並修復它給出的警告。

六、現在試試

在爲您提供下載 Qt 6.2 的鏈接之前,我想向您指出 Qt 6.2的發行說明。發行說明還包含有關自 Qt 6.1 以來我們所做更改的許多詳細信息,包括已修復錯誤的完整列表。

它們還包含爲 Qt 6.2 貢獻補丁的所有人的完整列表。列表太長,無法在此處重現,但我要感謝大家幫助和實現 Qt 6.2。

如果您已經安裝了 Qt,那麼獲得 Qt 6.2 的最簡單方法是通過在線安裝程序。如果沒有,您可以從您的Qt 帳戶 或通過我們的網頁下載。

我希望你會喜歡 Qt 6.2。讓我們知道事情的進展並報告您可能發現的任何錯誤,以便在即將發佈的補丁版本中使 Qt 6.2 變得更好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章