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