翻譯|使用教程|編輯:吳園園|2020-06-01 14:48:54.463|閱讀 1109 次
概述:自從七年前Qt 5發(fā)布后,我們的世界發(fā)生了很多變化,現(xiàn)在是時候展望和規(guī)劃下一個新的主版本了。這篇文章 捕捉了幾個將要在Qt 6中亮相的關(guān)鍵點。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Qt是目前最先進(jìn)、最完整的跨平臺C++開發(fā)工具。它不僅完全實現(xiàn)了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發(fā)過程中需要用到的工具。如今,Qt已被運用于超過70個行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬設(shè)備及應(yīng)用。
自從七年前Qt 5發(fā)布后,我們的世界發(fā)生了很多變化,現(xiàn)在是時候展望和規(guī)劃下一個新的主版本了。這篇博文捕捉了幾個將要在Qt 6中亮相的關(guān)鍵點。 Qt 6將是我們Qt 5系列的延續(xù), 因此不會對用戶造成干擾。但是這個新的版本將擁有更高的靈活性來實現(xiàn)新的特性和功能,和目前的Qt 5系列相比,它能更好地支持當(dāng)下和未來的需求。正如下面即將描述的一樣,Qt 6將致力于實現(xiàn)與Qt 5很大程度上的兼容。Qt 5的新版本還正在開發(fā)中,我們的目標(biāo)是將Qt 6中將要實現(xiàn)的一些新特性在Qt 5.14和Qt 5.15 LTS中發(fā)布其略微初級的版本。隨著Qt 5.14特性的固定,更多的研發(fā)重點將轉(zhuǎn)向Qt 6,我們的目標(biāo)是在2020年年底前發(fā)布Qt 6的第一個版本。在我們深入了解Qt6的新內(nèi)容之前,讓我們回顧一下Qt對用戶而言的核心價值,首先明確我們不能更改的內(nèi)容。
Qt對用戶的價值體現(xiàn)在哪里?
Qt已經(jīng)成功應(yīng)用與許多不同的行業(yè),并且在不斷的橫向發(fā)展,Qt對用戶的核心價值體現(xiàn)如下:
新版本的Qt需要我們進(jìn)行一些調(diào)整以適應(yīng)新的市場需求,同時也要把上述5個價值觀作為我們工作的核心內(nèi)容。 桌面應(yīng)用是Qt的基礎(chǔ),也是Qt得以成長和強大的市場,桌面應(yīng)用是我們大多數(shù)用戶第一次接觸Qt的地方,也是組成Qt工具鏈的基礎(chǔ)。保持桌面應(yīng)用的健康和成長是在其他市場也保持增長的先決條件。 嵌入式和互聯(lián)設(shè)備是我們增長最快的領(lǐng)域。觸屏設(shè)備的數(shù)量正在以指數(shù)級增長,但這些設(shè)備的硬件價格卻承受著巨大壓力。低端芯片組,單片機,結(jié)合中小型觸摸屏的設(shè)備將無處不在。這些設(shè)備中的大多數(shù)都是功能相對簡單的,但它們都需要精致流暢的用戶界面。因此我們需要確保我們的產(chǎn)品能夠瞄準(zhǔn)這個空間,從而實現(xiàn)我們的可擴展的承諾。 與此同時,高端設(shè)備的用戶界面的復(fù)雜性將繼續(xù)增加,它們往往包括了數(shù)千個不同的屏幕和許多的應(yīng)用程序。將2D和3D元素合并到一個用戶界面也是很常見的,增強和虛擬現(xiàn)實的使用也是如此。 人工智能的元素將更廣泛地應(yīng)用于應(yīng)用程序和設(shè)備中,我們需要有簡單的方法來集成這些元素。 正在創(chuàng)建的互聯(lián)設(shè)備數(shù)量的強勁增長,以及對用戶體驗的更高要求,使得我們更有必要專注于開發(fā)全球領(lǐng)先的工具,以簡化應(yīng)用程序和設(shè)備的創(chuàng)建流程。將UX設(shè)計人員集成到開發(fā)工作流中是我們的目標(biāo)之一,但是我們還需要在許多其他領(lǐng)域去嘗試進(jìn)一步簡化用戶的工作。 Qt 6將是Qt的一個新的重大版本,這個版本的主要目標(biāo)是為2020年以后的需求做好準(zhǔn)備,在此次過程中我們將對代碼庫進(jìn)行整理,使其更容易維護(hù)。重點將放在Qt中那些需要調(diào)整軟件架構(gòu)的部分,但是如果不破壞與Qt 5.x兼容性,那這部分就無法完成。 為了適應(yīng)未來幾年的需求,下面是我們會對Qt進(jìn)行的的一些關(guān)鍵性修改。
新一代的QML
QML和Qt Quick是過去幾年推動Qt增長的主要技術(shù)。使用這些技術(shù)可以直觀的創(chuàng)建用戶界面是我們產(chǎn)品的一個獨特賣點。 QML是為Qt 5創(chuàng)建的,但是它有一些問題和限制。這也意味著它可以大幅改進(jìn),我們計劃在Qt 6中實現(xiàn)這些改進(jìn)。我們計劃如下: 引入強類型。弱類型使得用戶很難對他們的代碼庫進(jìn)行大的更改。一個強大的類型系統(tǒng)允許IDE和其他工具幫助用戶完成這項任務(wù),并極大地簡化了維護(hù)成本。此外,它還有助于我們生成性能更好的代碼和減少相關(guān)開銷。 JavaScript成為QML的一個可選特性。使用QML時使用完整的JavaScript引擎會提升復(fù)雜性,而且會引起性能上的開銷,尤其是在單片機等低端硬件上,性能開銷更加明顯。然而,這個特性在許多其他應(yīng)用場景中非常有用。 去掉了QML的版本控制。通過簡化QML中的某些查找規(guī)則并更改上下文屬性的工作方式,我們可以消除QML中的版本控制。反過來,這將大大的簡化QML引擎,極大地簡化我們維護(hù)Qt Quick的工作負(fù)擔(dān),并為用戶簡化QML和Qt Quick的使用流程。 刪除QObject和QML之間重復(fù)的數(shù)據(jù)結(jié)構(gòu) 目前我們的元對象系統(tǒng)和QML之間有相當(dāng)多重復(fù)的數(shù)據(jù)結(jié)構(gòu),這些重復(fù)的數(shù)據(jù)結(jié)構(gòu)會降低啟動性能,增加內(nèi)存使用量。通過統(tǒng)一這些數(shù)據(jù)結(jié)構(gòu),我們能夠減少許多開銷。 避免運行時生成數(shù)據(jù)結(jié)構(gòu)。這與上面的一點有關(guān),其中許多重復(fù)的數(shù)據(jù)結(jié)構(gòu)目前都是在運行時生成的。其中大多數(shù)完全有可能在編譯時生成。 支持把QML編譯成高效原生的C++代碼。通過強大的類型和更簡單的查找規(guī)則,我們可以將QML轉(zhuǎn)換為高效原生的C++代碼,從而顯著提高運行時性能 支持隱藏實現(xiàn)細(xì)節(jié)。為了能夠在QML組件中隱藏數(shù)據(jù)和功能,對方法和屬性進(jìn)行“私有化”一直是一個長期的需求。 更好的工具集成。我們當(dāng)前的QML代碼模型時常不完整,這使得重構(gòu)和在編譯時檢測錯誤變得困難甚至不可能。通過上述更改,應(yīng)該能夠提供與C++相媲美的編譯時診斷以及大幅改進(jìn)的重構(gòu)支持。
下一代圖形
自從Qt 5.0以來,圖形領(lǐng)域發(fā)生了很多變化,這導(dǎo)致我們不得不對圖形棧進(jìn)行重大更改,以保持其競爭力。 在Qt 5中,我們統(tǒng)一使用OpenGL作為3D圖形的API。從那時起,產(chǎn)生了許多新的API。在Linux上Vulkan是OpenGL的指定接班人,蘋果正在推動Metal的發(fā)展,而微軟有Direct 3D。這意味著Qt將來必須與所有這些API無縫地銜接。為了實現(xiàn)這一點,必須定義一個新的圖形抽象層的API(類似于平臺集成層的QPA),稱為渲染硬件接口(RHI)。我們需要將所有的渲染基礎(chǔ)設(shè)施(QPainter、Qt Quick Scenegraph和我們的3D支持)建立在該層的基礎(chǔ)之上。 不同圖形API的合成也導(dǎo)致我們必須支持不同的著色語言。Qt著色器工具模塊將幫助我們在編譯和運行時交叉編譯著色器。 3D正在扮演越來越重要的角色,而我們目前的產(chǎn)品還沒有一個統(tǒng)一的解決方案來創(chuàng)建同時包含2D和3D元素的UI。目前,將QML與Qt 3D或3D Studio中的內(nèi)容集成是很麻煩的,并且會導(dǎo)致一些性能開銷。此外,在2D和3D內(nèi)容之間進(jìn)行逐幀的動畫同步和轉(zhuǎn)換還沒有辦法做到。 3D內(nèi)容與Qt Quick新的集成方式就是為了解決這個問題。在這種情況下,一個全新的渲染器將允許同時渲染2D和3D內(nèi)容,并支持兩者之間的任意嵌套。這將把QML轉(zhuǎn)換為3D UI的UI定義語言,并且不再需要UIP格式。我們將提供一個新的技術(shù)預(yù)覽版本的Qt Quick與3D支持的版本,它已經(jīng)包含在了Qt 5.14中,更多的信息將會在一個單獨的博文中進(jìn)行說明。 最后,新的圖形棧需要強大的圖形素材處理的支持,它能在編譯時根據(jù)目標(biāo)硬件預(yù)處理這些素材并在需要時使用。比如將PNG文件轉(zhuǎn)換為壓縮紋理格式,將許多文件編譯為紋理圖集,將著色器和網(wǎng)格轉(zhuǎn)換為優(yōu)化的二進(jìn)制格式等等。 我們還打算為Qt 6引入統(tǒng)一的主題樣式引擎,這將允許我們在桌面和移動平臺上獲得Qt Widgets和Qt Quick的原生外觀。
統(tǒng)一并且一致的工具庫
我們創(chuàng)建用戶界面的圖形工具已經(jīng)被一分為二,包括Qt 3D Studio和Qt Design Studio。此外,Qt 3D Studio與Qt的其余部分有些脫節(jié),導(dǎo)致了相當(dāng)多的重復(fù)工作。 我們通過將Qt 3D Studio所需的功能合并回Design Studio來統(tǒng)一這些功能。Design Studio與Qt Creator共享了大量代碼和應(yīng)用/插件框架,提供了很好的設(shè)計體驗,并為我們提供了在設(shè)計師和開發(fā)者之間搭建橋梁的工具。 設(shè)計工具還需要與Photoshop、Sketch、Illustrator、Maya、3D Max等內(nèi)容創(chuàng)建工具進(jìn)行良好的集成。 開發(fā)者工具需要大量的投入,這樣我們才能提供對C++、QML和Python等提供最佳的支持。提供統(tǒng)一工具還意味著開發(fā)人員可以很容易地使用Qt Creator中的設(shè)計功能,而UX設(shè)計者可以從開發(fā)者工具的特性(如編譯項目或在設(shè)備上測試)中獲益。 QMake作為Qt 5中使用的構(gòu)建系統(tǒng)有很多缺陷和限制。對于Qt 6,我們的目標(biāo)是使用CMake作為標(biāo)準(zhǔn)的第三方構(gòu)建系統(tǒng)來構(gòu)建Qt。到目前為止,CMake是C++世界中使用最廣泛的構(gòu)建系統(tǒng),我們迫切需要更好地與它集成。在QMake上我們將繼續(xù)支持用戶,但不會對其進(jìn)一步開發(fā)或用來構(gòu)建Qt框架本身。
增強已有的C++ API
C++在過去的幾年中發(fā)生了很大的變化。雖然Qt 5.0必須以C++ 98為基礎(chǔ),但現(xiàn)在Qt 6可以依賴C++ 17。這意味著C++提供了更多的開箱即用的功能,這在我們使用Qt 5時是沒有的。我們使用Qt 6的目標(biāo)是更好地集成這些能力,同時也保持向前的兼容性。 Qt 6中,我們希望把QML和Qt Quick的一些功能引入到C++中。我們致力于為QObject及其相關(guān)類引入一個新的屬性系統(tǒng),將QML中的綁定引擎集成到Qt的核心中,并使其在C++中可用。新的屬性系統(tǒng)和綁定引擎將顯著降低綁定的運行時開銷和內(nèi)存消耗,并使它們可用于Qt的所有部分,而不僅僅是Qt Quick。
語言支持
在Qt 5.12中,我們引入了對Python的支持,并通過Qt為WebAssembly添加了瀏覽器作為新的平臺。在發(fā)布6.0之后,保持并進(jìn)一步擴展跨平臺特性將是Qt 6系列的一個重要部分。
兼容Qt 5和增量改進(jìn)
與舊版本的兼容性是非常重要的,也是我們開發(fā)Qt 6時的主要需求。用戶已經(jīng)使用我們的框架編寫了數(shù)十億行代碼,因此,我們所做的任何不兼容的更改都會給用戶帶來額外的成本。此外,對Qt 6的更改要求用戶做的工作越多,用戶升級的速度就會越慢,這將導(dǎo)致維護(hù)Qt 5的最后一個版本的成本更高。 因此,在用戶代碼中我們應(yīng)該避免觸發(fā)編譯時或運行時錯誤進(jìn)而使得Qt運行崩潰。如果我們必須破壞兼容性,編譯時錯誤比運行時的靜默破壞更可取(因為后者更難檢測)。 當(dāng)我們確實需要刪除Qt的某些廢棄部分,那么我們必須要確保它不會影響用戶需要的部分,大部分用戶都在使用的關(guān)鍵功能,比如Qt Widgets和其他部分毫無疑問必須保留。 我們正在計劃對核心類和功能進(jìn)行許多在Qt 5中無法實施的增量改進(jìn)。我們的目標(biāo)是保持完整的源代碼兼容性,但是由于我們可以打破Qt 6的二進(jìn)制兼容性,我們可以做很多在Qt 5中無法完成的清理和改進(jìn)。 除了這些,我們還將對Qt 6進(jìn)行其它的清理。我們將刪除Qt 5中已經(jīng)廢棄的大部分功能(函數(shù)、類或模塊)。從長遠(yuǎn)來看,這種清理將有助于節(jié)省開發(fā)人員的時間,并允許我們把更多的精力放在維護(hù)和編碼上。 然而,對棄用部分的移植需要盡可能的簡單,我們的用戶可以完美地使用Qt 5.15 LTS增量地完成這一工作。我們的目標(biāo)應(yīng)該是Qt 6與Qt 5.15 LTS足夠兼容,這樣就可以輕松地維護(hù)一個可以同時針對兩個版本編譯的大型代碼庫。
市場和技術(shù)產(chǎn)品結(jié)構(gòu)
除了改進(jìn)Qt框架和工具,我們的目標(biāo)是為組件和開發(fā)工具創(chuàng)建一個新的市場。這個方向?qū)⒚嫦蜷_發(fā)、設(shè)計應(yīng)用程序和嵌入式設(shè)備的直接使用者,而不是面向最終用戶。因此,它將成為Qt生態(tài)系統(tǒng)的一個凝聚中心。它將為第三方廠商提供一個發(fā)布Qt擴展組件的場所,擴展可以是免費或商業(yè)的。 Qt在過去的幾年里增長良多,當(dāng)前最重要的任務(wù)就是發(fā)布一個新版本。在Qt 6中,我們有機會重組我們的產(chǎn)品,并將必要的框架和工具打包為一個更小的核心。我們將利用應(yīng)用市場來交付我們的附加框架和工具,而不是作為與核心Qt產(chǎn)品緊密耦合的捆綁包。這將使我們在何時交付以及如何交付方面具有額外的靈活性,并允許我們?yōu)槟承└郊咏M件解耦發(fā)布計劃。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: