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