翻譯|行業(yè)資訊|編輯:鮑佳佳|2020-11-18 10:01:16.047|閱讀 479 次
概述:Qt Quick Controls 1是我們第一個QML的UI框架。這些控件主要是用QML編寫的,沒有使用太多的C++。當(dāng)時,QML還是一種新技術(shù),這意味著我們在性能設(shè)計方面沒有足夠的經(jīng)驗,不知道會有什么結(jié)果。因此,造型API在設(shè)計上最終是低效的,它有很多肥大的委托,在控制邏輯和造型上都使用了大量的JavaScript、綁定、自省、Loaders和QObjects。它還存在對Qt Widgets的鏈接依賴,以獲得本地的樣式和基于Widget的對話框。而如果沒有我們今天的QML編譯器,這一切最終都是一種相當(dāng)緩慢和混亂的方法。Qt Quick Controls 2是當(dāng)我們意識到它在嵌入式硬件上的表現(xiàn)也不好時重新考慮解決方案。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創(chuàng)建CLI應(yīng)用程序中非常有用。而且它也可以在三種主要的臺式機(jī)操作系統(tǒng)以及移動操作系統(tǒng)(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設(shè)備,Android(Necessitas)和iOS的端口上運(yùn)行。現(xiàn)在我們?yōu)槟闾峁┝嗣赓M(fèi)的試用版。趕快點(diǎn)擊下載Qt最新試用版吧>>
Qt Quick Controls 1是我們第一個QML的UI框架。這些控件主要是用QML編寫的,沒有使用太多的C++。當(dāng)時,QML還是一種新技術(shù),這意味著我們在性能設(shè)計方面沒有足夠的經(jīng)驗,不知道會有什么結(jié)果。因此,造型API在設(shè)計上最終是低效的,它有很多肥大的委托,在控制邏輯和造型上都使用了大量的JavaScript、綁定、自省、Loaders和QObjects。它還存在對Qt Widgets的鏈接依賴,以獲得本地的樣式和基于Widget的對話框。而如果沒有我們今天的QML編譯器,這一切最終都是一種相當(dāng)緩慢和混亂的方法。Qt Quick Controls 2是當(dāng)我們意識到它在嵌入式硬件上的表現(xiàn)也不好時重新考慮解決方案。
Qt Quick Controls 2
對于 Controls 2,我們的基本想法是將大部分的實現(xiàn)從 QML 轉(zhuǎn)移到 C++。通過這樣做,我們的目標(biāo)是盡可能地精簡代表,而不是從C++中去做繁重的工作。這包括所有的控制邏輯、鼠標(biāo)、觸摸、事件處理、API等等。只有視覺效果被留在QML中定義。這就導(dǎo)致了精簡的委托,更少的運(yùn)行時開銷,更少的內(nèi)存使用,更清晰的代碼流,以及更快的執(zhí)行速度。
但有一點(diǎn)是目前為止一直缺少的,那就是對原生桌面樣式的支持。Controls 2的主要動機(jī)是在嵌入式設(shè)備上實現(xiàn)良好的性能,由于我們有桌面的Qt Widgets,我們算是接受了一些基本的桌面功能缺失。我們提供了有開放文檔的樣式(Universal,Material),并使創(chuàng)建自定義的樣式變得容易。但現(xiàn)在,自Qt 5.12以來,Controls 1已經(jīng)被廢棄,并且也將被排除在Qt 6二進(jìn)制包之外,現(xiàn)在是時候重新開發(fā)面向桌面的樣式了。
本地桌面風(fēng)格
在 Qt 6.0 中,我們?yōu)?Controls 2 增加了兩種新的桌面風(fēng)格:Windows 和 macOS。與現(xiàn)有的Fusion風(fēng)格使用Qt Quick基元不同,這些新風(fēng)格使用QStyle進(jìn)行繪制。原因是它仍然能很好地與 "低級 "平臺API對接,以獲得真正的原生樣式。但我們并沒有與Widgets共享QStyle,而是專門為Controls制作了一份專屬副本。后者聽起來可能很奇怪,因為我們很自然地認(rèn)為共享一個代碼庫是一種更簡單的方法。但原因有幾個:首先,我們不想破壞Widgets或任何第三方的風(fēng)格。而且我們不能在不破壞源碼兼容性的情況下將QStyle從Widgets中剔除。QStyle不僅在它的API中到處都有對Widgets的引用,而且它還直接使用了Widgets本身的枚舉和常量。同時,我們也不希望 Controls 在未來很長一段時間內(nèi)對 Widgets 產(chǎn)生依賴性。
另一個原因是,我們希望能夠自由地在任何我們認(rèn)為合適的地方修改代碼。我們可以通過很多方法來優(yōu)化QStyle-copy,以更好地適應(yīng)Qt Quick場景圖和Controls styling API。其中一個變化是,我們只使用QStyle來繪制控件的背景。同樣的背景貼圖將被緩存并重用于所有相同類型的控件,并在QSGNinePatchNode的幫助下縮放到正確的大小。文本和前景將使用正常的QML渲染在上面。而對于所有這樣的差異,我們希望能夠在不受限制或擔(dān)心保持與Widgets的兼容性的情況下實現(xiàn)它們。出于同樣的原因,我們使用QStyle進(jìn)行繪制是一個私人的實現(xiàn)細(xì)節(jié)。Controls已經(jīng)有了一個很好的樣式API,我們不想再引入和維護(hù)第二個。
最后,我們不一定要讓原生樣式看起來和Widgets完全一樣。對于一些控件,我們使用了一種混合的方法,用QML在QStyle繪制的紋理上添加動畫和漸變效果。最后,我們真正想要的是讓原生樣式具有流暢的性能,并且盡可能地看起來 "原生",而不一定要像Widgets一樣。
Qt 6.0準(zhǔn)備了什么?
對于 Qt 6.0,大多數(shù)控件都會被新的桌面樣式所支持。但并不是所有的控件都支持。將被遺漏的是那些目前在QStyle中還沒有實現(xiàn)的控件,比如Switch或RangeSlider。它們?nèi)匀豢梢允褂茫珜⒂肍usion風(fēng)格繪制。缺失的控件將在即將發(fā)布的Qt中逐步得到支持,原生對話框和菜單也是如此。如果我們看得更遠(yuǎn),我們的計劃包括提供更多以桌面為中心的控件,這些控件你可能會在今天的Widgets或本地工具包中找到。
所以,還有很多事情要做。但是,我們認(rèn)為新的桌面風(fēng)格是未來幾年內(nèi)讓Controls與Widgets在桌面開發(fā)方面平起平坐的第一步。
下面是使用新的桌面樣式運(yùn)行的Qt Quick Controls 2應(yīng)用程序的截圖。需要注意的是,這仍然是一項持續(xù)的工作,任何小問題都會在最終發(fā)布之前被解決。
Qt商業(yè)組件Qtitan推薦:
感謝您的閱讀,希望這篇文章能帶給你一定的幫助!如果這篇文章沒能滿足你的需求、點(diǎn)擊獲取更多文章教程!現(xiàn)在立刻下載Qt6免費(fèi)試用吧!更多Qt類開發(fā)工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在線訂購現(xiàn)直降1000元,歡迎咨詢慧都獲取更多優(yōu)惠>>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: