天天看點

Qt 6.0釋出

Qt6.0于2020年12月8日釋出。

Qt官網的釋出部落格位址

https://www.qt.io/blog/qt-6.0-released

今天宣布Qt 6.0的釋出,我真的很激動。這是新的主要版本的第一次釋出,标志着Qt的一個重要裡程碑。幾年前,我們開始研究最初的想法,從那以後,我們為創造下一代Qt付出了巨大的努力。

Qt 6.0釋出

Qt 5多年來取得了巨大的成功,自Qt 5.0釋出以來的八年裡,我們的使用者群和Qt使用量都有了巨大的增長。但自2012年以來,世界發生了重大變化。Qt在嵌入式系統中的使用飛速發展,C++也在發展,新的3D圖形API也出現了。這些都是直接影響Qt的因素的例子。

作為一個跨平台的架構,Qt需要适應這些不斷變化的需求。在Qt 5的生命周期中,我們已經很好地适應了這些需求。然而,在Qt 5系列中保持完全的源代碼和二進制相容性使得某些事情在它的生命周期内不可能修複。有了Qt 6,我們現在有機會做出改變,并建構Qt以更好地适應未來幾年。

是以,Qt 6的使命是讓Qt成為未來的生産力平台。Qt 6.0作為Qt的一個主要版本,給了我們更高的自由度來實作新的特性、功能和更好地支援今天和明天的需求。Qt 6.0是Qt 5系列的延續,我們一直緻力于使遷移對使用者無中斷。我發表了一篇Qt 6願景博文捕捉18個月前的想法。

在建立Qt 6時,我們確定Qt的核心價值觀得到堅持和維護,包括:

  • 它的跨平台特性,允許使用者使用一種技術并從單個代碼庫将他們的應用程式部署到所有桌面、移動和嵌入式平台
  • 其可擴充性從低端的單一用途裝置到高端的複雜桌面應用程式或互聯系統
  • 其世界一流的應用程式設計接口和工具檔案,簡化了應用程式和裝置的建立
  • 它的可維護性、穩定性和相容性,允許使用者用最少的努力來維護大型代碼庫
  • 擁有超過150萬使用者的大型開發者生态系統

Qt 6.0是Qt 6系列的第一個版本,它解決了新的市場需求,同時将核心價值保持在我們工作的核心。

在開發Qt 6時,我們深入研究了Qt的一些核心部分,以确定我們如何改進它們。我們發現了幾個核心重點領域,并投入大量時間進行改進。這些領域包括:

  • 利用C++17
  • 下一代QML
  • 新圖形架構
  • Qt Quick統一2D和3D
  • CMake建構系統(應用程式仍支援qmake)

我們當然也花時間在其他領域做了大量的改進,太多了,不能在這裡一一提及,我建議你看看更詳細的維基頁面。我們還将舉辦“滿足Qt 6.0”網絡研讨會,涵蓋美洲/歐洲、中東和非洲地區和歐洲、中東和非洲/APAC時區。但是讓我們來看看一些亮點。

C++17

Qt 6.0釋出

有了Qt 6,我們現在需要一個C++17相容的編譯器,以便在開發Qt時使用更現代的C++語言結構,并且允許在應用程式設計接口端有內建點。

核心庫和應用程式設計接口

Qt核心已經做了很多工作,因為它是實作Qt最核心部分的子產品。我們已經在那裡經曆了許多領域并做出了改進。舉幾個最重要的例子:

  • 新的屬性和綁定系統:這個系統現在引入了綁定的概念,這使得QML在C++的Qt 5中取得了巨大的成功。
  • 字元串和Unicode:有了Qt 5,我們開始将Qt完全與Unicode對齊,在這裡我們完成了大量的工作,但是還有一些項目需要我們為Qt 6進行清理。更多細節将在稍後單獨的部落格中公布。
  • QList是Qt 5中經常被批評的一個類,因為它是對存儲在其中的大于指針的對象進行堆配置設定,這給堆配置設定方法帶來了壓力。在Qt 6中,我們改變了這一點,将QList和QVector統一為一個類。檢視我們的關于QList的博文有關詳細資訊,請參見Qt 6。
  • QMetaType和QVariant是我們Qt元對象系統工作的基礎。沒有QMetaType,信号和插槽是不可能的,動态調用需要QVariant。這兩個類用Qt 6幾乎完成了重寫,您可以閱讀有關細節這裡。

Qt其他與圖形無關的部分也出現了較大的變化。例如,Qt并發已經經曆了幾乎完全的重寫,現在多線程應用程式的開發比以往任何時候都更加容易。Qt網絡已經經曆了許多清理和改進。看到這個了嗎部落格文章詳情。

新圖形架構 

Qt 5的圖形架構非常依賴OpenGL作為底層的3D圖形應用程式設計接口。雖然這是我們在2012年建立Qt 5時的正确方法,但随着Metal和Vulkan的推出,我們周圍的市場在過去幾年發生了顯著變化。我們現在有一大套不同的圖形API,通常在不同的平台上使用。對于作為跨平台架構的Qt來說,這當然意味着我們必須适應這一點,并確定我們的使用者可以在所有平台上運作Qt最高性能。

Qt 6.0釋出

是以,雖然Qt 5依賴OpenGL實作硬體加速圖形,但Qt 6完全改變了局面。Qt Quick中的所有3D圖形現在都建立在一個名為RHI(渲染硬體接口)的新的3D圖形抽象層之上。RHI使得Qt可以使用底層作業系統/平台的本地3D圖形應用程式設計接口。是以Qt Quick現在預設會在Windows上使用Direct3D,在macOS上使用Metal。有關詳細資訊,請檢視關于RHI的博文系列。 

Qt中OpenGL特定的類仍然存在,但是現在被移出了QtGuiQtOpenGL子產品。我們還添加了一個名為QtShaderTools以跨平台的方式處理這些應用程式接口的不同着色語言。

Qt快速3D和Qt 3D

Qt Quick 3D是一個比較新的子產品。它無縫擴充了Qt Quick的3D功能。對于Qt Quick 3D,我們的重點是建立一個與Qt Quick現有部分(用于2D使用者界面)一樣易于使用的應用程式設計接口,同時為建立複雜的3D場景提供全面支援。這項工作背後的主要目标是實作2D和3D内容的無縫內建。

本子產品見證了Qt 6的重大改進,這是我們在Qt 5系列中無法做到的。最重要的是,它現在總是使用RHI抽象層來優化底層圖形應用程式設計接口和硬體。此外,它現在的特點是在2D和3D内容之間有一個更深、更高性能的內建,允許您将2D項目放入3D場景中。它還極大地改進了對glTF2和基于實體的渲染的支援,使得導入在其他設計工具中建立的資産變得微不足道。該子產品還有許多其他主要改進,更深入的描述可以在單獨的部落格文章。

Qt 3D現在也是基于RHI抽象層之上的,已經看到了一些性能改進和清理。您可以在我們的合作夥伴KDAB的兩篇部落格文章中找到更多詳細資訊(這裡和這裡).

Qt Quick的桌面樣式

Qt 6.0釋出

當我們為Qt Quick建立控件集時,我們的重點是使它們輕量級和高性能。是以,他們不支援Qt 5中的桌面樣式。然而,在Qt 6中,我們找到了一種方法,使它們在桌面作業系統上看起來和感覺上都是本地的。通過6.0,Qt Quick現在支援macOS和Windows上的本機樣式。看到這個了嗎關于細節的博文。Qt 5中的材質和融合風格已經存在安卓和Linux的本地外觀和感覺。我們正在為未來的Qt版本改進這些,并計劃為iOS實作一種本地風格。

與特定平台功能的接口

即使Qt提供了獨立開發應用程式平台所需的大部分功能,有時也需要與特定于平台的功能接口。在Qt 5中,我們提供了一組附加子產品(QtX11Extras、QtWinExtras、QtMacExtras)來幫助實作這一目的。但是這種與Qt其餘部分的完全分離導緻了Qt内部的一些架構問題、不一緻和代碼重複。在Qt 6中,我們努力對此進行清理,并将這些附加子產品提供的功能合并到Qt中直接提供的平台特定的API中。這将使Qt 6中與作業系統/平台特定的應用程式設計接口更加容易。看一看這裡更多詳情。

建構系統和包裝

我們還在如何建構和分發Qt方面做了一些相當大的改變。值得一提的是現在Qt 6本身使用CMake建構。這也為我們所有使用CMake建構項目的使用者帶來了顯著的改進。我們将在Qt 6的生命周期内繼續支援qmake,是以如果您正在使用它,沒有必要對您的建構系統進行任何更改,但是我們建議所有新項目都使用CMake。

Qt 6還附帶了一個小得多的預設包,許多附加元件現在通過包管理器作為單獨的包分發。這給了我們更大的靈活性來調整附加元件的釋出時間表以适應市場需求,例如,允許更頻繁的特性釋出作為核心Qt包,或者讓它們同時适用于多個Qt版本。此外,我們可以使用包管理器作為第三方内容的傳遞管道。最後,它給了我們的使用者更多的靈活性,因為他們可以選擇隻下載下傳他們真正需要的東西。

目前,我們使用現有的Qt安裝程式作為包管理器的後端,但正在研究未來版本的替代方案。檢視博文這裡更多詳情。

相容性 

當對Qt 6進行更改時,我們試圖調整我們的APIs以适應我們認為的未來需求,同時盡量減少對現有使用者的破壞。雖然您的代碼需要進行一些調整,以充分利用Qt 6,但我們已經嘗試盡可能輕松地移植到新版本。

我們做的第一件事就是清理我們的代碼庫。在Qt 5的生命周期中,我們否決了相當多的API,甚至整個子產品。我們做的第一件事是删除這些内容,為未來打造一個更精簡的Qt,并允許我們留下一些今天已經沒有任何意義的東西。

然而,我們已經注意在Qt 5.15中将盡可能多的這些API标記為不推薦使用。在那裡啟用不贊成的警告并清除它們将會使你的代碼庫與Qt 6相容。

Qt 5中删除的一些最常用的應用程式接口已經被移到了Qt5CoreCompat子產品。它包含幾個從Qt 6中删除的廣泛使用的類,如QRegExp、QTextCodec、舊的用于XML的SAX解析器以及一些其他項目。本子產品的目的是作為移植幫助,除了針對Qt 5和安全相關問題的回歸之外,不會接受錯誤修複。我們建議您将它用于移植,但随後逐漸移除對子產品的依賴。 

如果你想開始移植到Qt 6,我們有一個更詳細的移植指南在我們的文檔中。

支援的平台

Qt一直是一個跨平台的平台,這将在Qt 6中繼續。Qt 6.0支援

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

在嵌入式方面,我們支援多種運作Linux的嵌入式裝置。Qt 6還不支援Qt 5支援的任何嵌入式實時作業系統。QNX和INTEGRITY最近都增加了對C++17的支援,我們計劃在Qt 6.2釋出時增加對它們的支援。

觀點

Qt 6.0還不支援Qt 5.15中的許多附加子產品。這是有意決定釋放時間,以確定我們能夠完成Qt架構基本子產品所需的所有更改。

我們現在正緻力于将大部分這些附加元件引入Qt 6。我們已經做了大量的工作,我們希望在Qt 6.2釋出的時候,大部分的附加元件能夠再次得到支援。許多附加元件已經針對Qt 6進行了編譯,但是它們還沒有正式釋出,因為一些清理工作和重構還有待完成。我們計劃在Qt 6.2釋出時移植大部分重要的附加元件。下面是我們在Qt 6.0及更高版本中的附加支援的完整概述部落格文章。

除了将缺失的附加元件移植到Qt 6之外,我們在未來幾個月的許多Qt 6相關工作将集中在新版本的穩定性上,并在Qt内部更廣泛地使用新的屬性系統。

我們已經調整了Qt 6.1和6.2的釋出時間表,并計劃在4月份釋出Qt 6.1。之後,我們計劃在9月底釋出Qt 6系列的第一個長期支援版本,Qt 6.2 LTS。

而且我們今年還沒有完成,你也可以期待一個全新版本的Qt Creator和Qt Design Studio在聖誕節前釋出!兩者都将全力支援Qt 6。

摘要

Qt 6.0是下一代Qt的起點。它還沒有5.15那麼完整,但我們将在未來幾個月内填補空白。在為Qt的下一個版本奠定基礎方面,我們已經做了大量重要的工作。其中許多變化可能不會立即顯現,但我堅信它們将有助于Qt在未來幾年保持競争力。

我想感謝大家誰幫助Qt 6.0成為可能。在Qt 6的開發過程中,超過250人貢獻了代碼,數千人幫助編寫了錯誤報告并提供了回報。沒有你,Qt 6不會有今天。非常感謝你的辛勤工作!

最後,我希望你們都喜歡你們所看到的Qt 6。不要擔心如果你的最喜歡的子產品還沒有移植,我們正在努力。請從下載下傳新版本我們的網站或者你的季度賬戶。讓我們知道你的想法,我們都很感激回報幫助我們使後續版本更好!

Qt6