Qt 6 正式發布


Qt 6.0 正式發布了。該版本是 Qt 6 系列的第一個版本,旨在滿足一些新的市場需求。

官方表示,自 2012 年發布 Qt 5.0 以來,Qt 的用戶群體和使用量都有巨大的增長。但是八年來,世界發生了重大變化,比如嵌入式系統中 Qt 的使用量猛增,C++不斷發展,出現了新的 3D 圖形 API 等。這些都是直接影響 Qt 發展迭代的因素。

因此,官方稱 Qt 6 的任務是使 Qt 成為未來的生產力平台。作為 Qt 的主要版本,Qt 6.0 是 Qt 5 系列的延續,提供了更高的自由度,以實現新功能。Qt 6 的主要變化包括這些領域:

  • 適配 C++ 17
  • 采用下一代 QML
  • 采用新的圖形架構
  • Qt Quick 統一 2D 和 3D
  • 改用 CMake 構建系統(老項目仍支持 qmake)

C ++ 17

 

Qt 6中的C ++ 17

 

在 Qt 6 中加入了一個與 C++ 17 兼容的編譯器,以便在開發 Qt 時使用更現代的 C++ 語言構造,並允許在 API方面進行集成。

核心庫和 API

作為 Qt 最核心部分的模塊,Qt Core 本次更新遍歷了許多領域並進行了改進,以下是一些最重要的變化:

  • 新的屬性和綁定系統:該系統現在帶來了綁定的概念,這使得 QML 在 C++ 的 Qt 5 中取得了巨大的成功。
  • 字符串和 Unicode:官方從 Qt 5 開始將 Qt 與 Unicode 完全對齊,但是 Qt 6 中還有一些問題需要整理解決。更多詳細信息將在稍后的單獨博客中發布。 
  • QList 是一個在 Qt 5 中經常被批評的類,因為它是堆分配存儲在其中的對象的對象,該對象大於指針,從而給堆分配方法帶來壓力。在 Qt 6 中對此進行了更改,並將 QList 和 QVector 統一為一個類。有關詳細信息,請參見 Qt 6 中有關 QList 的博客文章
  • QMetaType 和 QVariant 是 Qt 的元對象系統如何工作的基礎。沒有 QMetaType,就不可能有信號和插槽,並且動態調用需要 QVariant。這兩個類在 Qt 6 中被幾乎完全的重寫,可以在此處閱讀有關詳細信息。

Qt 的其他與圖形無關的部分也發生了很大的變化。例如,Qt Concurrent 也經歷了幾乎完全的重寫,並且現在比以往更加輕松地進行多線程應用程序的開發。Qt Network 也有許多清理和改進。有關詳細信息,請參見此博客文章

新的圖形架構 

Qt 5 的圖形體系結構非常依賴 OpenGL 作為底層 3D 圖形 API。但過去 8 年來隨着 Metal 和 Vulkan 的推出,市場發生了巨大變化。現在,Qt 6 加入了大量不同平台的圖形 API,以確保用戶可以在所有平台上以最高性能運行 Qt。

 

Qt 6中的新圖形架構

 

在 Qt Quick 中的所有 3D 圖形現在都基於稱為 RHI(渲染硬件接口)的 3D 圖形新抽象層之上。RHI 使 Qt 可以使用基礎 OS /平台的本機 3D 圖形 API。因此,默認情況下,Qt Quick 現在將在 Windows 上使用Direct3D,在 macOS 上使用 Metal。有關詳細信息,請參閱有關 RHI 的博客文章系列。 

Qt 中的 OpenGL 特定類仍然存在,但現在已從 QtOpenGL 模塊中的 QtGui 中移出。此外,Qt 6 還添加了一個名為 QtShaderTools 的新模塊,以跨平台的方式處理這些 API 的不同着色語言。

Qt Quick 3D 和 Qt 3D

Qt Quick 3D 是一個相對較新的模塊。它通過 3D 功能無縫擴展了 Qt Quick。

這個模塊在 Qt 6 上有了重大的改進,它現在始終使用 RHI 抽象層來充分利用基礎圖形 API 和硬件。此外,它現在在 2D 和 3D 內容之間具有更深、更高性能的集成,使用戶可以將 2D 項放置到 3D 場景中。它還大大改進了對 glTF2 和基於物理引擎的渲染支持。該模塊還有許多其他重大改進,有關詳細說明,請參見單獨的博客文章

Qt 3D 現在也基於 RHI 抽象層之上,進行了一些性能改進和清理。

構建系統和軟件包

 

 

Qt 6 還對構建和分發 Qt 的方式進行了一些重大更改。值得一提的是,Qt 6 本身現在是使用 CMake 構建的。這也為使用 CMake 構建項目的所有用戶帶來了體驗優化。官方將在 Qt 6 的生命周期內繼續支持 qmake,因此老用戶暫時無需對構建系統進行任何更改,但是官方建議所有新項目都使用 CMake。

Qt 6 還帶有一個更小的默認軟件包,許多附加組件現在通過軟件包管理器作為單獨的軟件包分發。它為用戶提供了更大的靈活性,開發者可以選擇僅下載他們真正需要的內容。

目前,官方已經將現有的 Qt 安裝程序用作軟件包管理器的后端,但正在研究將來版本的替代方法。有關更多詳細信息,請參見此處的博客文章。

支持平台

Qt 6 同樣支持跨平台:

  • Windows 10
  • macOS 10.14 及更高版本
  • Linux (Ubuntu 20.04, CentOS 8.1, OpenSuSE 15.1)
  • iOS 13 或更高版本
  • Android (API level 23 及更高版本)

在嵌入式方面,Qt 6 支持各種運行 Linux 的嵌入式設備。不過對於 Qt 5 支持的嵌入式實時操作系統,Qt 6 尚未提供支持。QNX 和 INTEGRITY 近期已增加對 C++17 的支持,Qt 團隊計划在發布 Qt 6.2 時增加對它們的支持。

兼容性

Qt 開發團隊表示,在對 Qt 6 進行修改時,他們也基於未來使用場景的考慮對 API 進行了調整,同時在兼容性方面盡量減少對現有用戶的破壞。

因此,如果開發者希望使用 Qt 6,需要對代碼進行調整。Qt 團隊也表示已盡可能簡化開發者移植到新版本的工作。

在 Qt 6 中,開發團隊為代碼庫進行了全面清理,以刪除在 Qt 5 生命周期中被棄用的 API 及模塊。Qt 5 中部分被刪除的最常用 API 已被遷移到 Qt5CoreCompat 模塊。它包含從 Qt 6 中刪除的幾個廣泛使用的類,例如 QRegExp, QTextCodec 和用於 XML 的舊 SAX 解析器以及其他部分項目。此模塊旨在幫助開發者進行遷移,除了針對 Qt 5 的回歸測試和安全相關問題外,該模塊不會收到 bug 修復。開發團隊建議使用它進行移植,然后逐步刪除對模塊的依賴。

對於下一個版本的發布安排,官方計划明年4月發布 Qt 6.1,然后在9月底發布 Qt 6 系列的首個長期支持版本 Qt 6.2 LTS。

當然,官方也花了一些時間修復了很多被開發者詬病的 BUG。更新詳情請查看 Qt 6 的 Wiki 頁面

延伸閱讀:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM