Qt Quick Controls 與 Qt Quick Controls 2的區別(詳細對照)


Qt Quick Controls 原本是為支持桌面平台而開發的,后來又加入了移動平台和嵌入式平台的支持。它們應用非常廣泛,因為它們提供了足夠靈活的樣式系統,以允許開發具有平台相關或者無關風格的應用程序。

在嵌入式系統中,硬件資源有限,這套系統可能是比較低效率的。而Qt Quick Controls 2正是為解決這樣的問題而生的,可以使用基准測試來指導開發。

C++和QML

在許多情況下,C++對內部狀態的處理會更加的高效。例如,對比C++處理events的過程,controls需要創建內部的MouseAreas並綁定Keys對象。

樣式

不僅是在C++中處理事件和邏輯能提高性能,這還允許可視化的QML層成為更簡單的聲明式層。這反映在controls項目的結構上:所有可視化實現都位於imports文件夾中,這樣,想要創建自己完整樣式的用戶就可以復制該文件夾並開始調整。看這里以了解更多關於樣式插件的實現。

在Qt Quick Controls 2中,樣式不再提供由controls實例化的組件(components),而是controls們包含可以被替代的item delegates。事實上,這代表delegates是現場實例化的Qt Quick item並且作為control的屬性,然后再簡單地把control作為父節點關聯起來。

模塊化和簡單化

在遇到復雜地controls的情況下,有時候把它們分開成不同的塊會更好一些。比如,一個復雜的ScrollView control:

ScrollView {
    horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
    Flickable {
        // ... } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

而替換成簡單的 ScrollBar/ScrollIndicator控件則可以被附加到任何的Flickable上:

Flickable {
    // ... ScrollBar.vertical: ScrollBar { } }
  • 1
  • 2
  • 3
  • 4

Qt Quick Controls 2 API的目標是變得更簡單明了。常規的操作很簡單,而更復雜的操作則可以變成拷貝到你代碼中的文檔型代碼塊。

特性比照表

~ Qt Quick Controls Qt Quick Controls 2
樣式化的delegates Yes Yes
內建原生styles Yes No
運行時style/theme切換 Yes1 Yes2
可用於Desktop Yes Yes
可用於Mobile Yes3 Yes
可用於Embedded Yes3 Yes
內部事件處理 QML C++

1.非官方支持,但是技術上可以通過私有API實現 
2.只有theme是可以在運行時切換的,而style則是固定的 
3.性能上可能不是最好的

遷移Qt Quick Controls的代碼

Qt Quick Controls2的API跟Qt Quick Controls是十分相似的,但是其實際上為了改進,還是有些API被改變了。最多的改變就是樣式方面的改變;所有控件的delegate都可以通過控件自身訪問,而非通過分離的樣式對象。

舉個例子,要在Qt Quick Controls中設置Button的樣式:

Button {
    style: ButtonStyle {
        label: Label {
            // ... } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

而在Qt Quick Controls2中,則像下面這樣:

Button {
    contentItem: Label {
        // ... } }
  • 1
  • 2
  • 3
  • 4
  • 5
准備遷移

遷移到 Qt Quick Controls 2的一個比較好的辦法是,將每個有自定義樣式的控件放到一個單獨的QML文件中。比如,上面Qt Quick Controls的button就可以移動到一個名為Button.qml的文件中,然后將這個文件放到一個名為controls的文件夾中,然后再按以下方式操作:

import "controls" as Controls Controls.Button { ... }
  • 1
  • 2
  • 3
  • 4
  • 5

這樣的做法在新舊的模塊中都能用,並能減少遷移開始時的工作量。

類型對照表

第一列列出了在Qt Quick Controls 1, Qt Quick Dialogs, 和 Qt Quick Extras中所有可用的類型,第二列則是Qt Quick Controls 2中對應的類型。如果沒有直接替代方案,則第三列包含提供相關功能的備選方案。最后一列包含了在兩個模塊內的對應類型區別的說明。

Qt Quick Controls 1 Qt Quick Controls 2 備選方案 備注
Action Action Shortcut
(Qt Quick)
 
ApplicationWindow ApplicationWindow    
BusyIndicator BusyIndicator    
Button Button    
Calendar MonthGrid,
DayOfWeekRow,
WeekNumberColumn
(Qt Labs Calendar)
Qt Labs Calendar: MonthGrid, DayOfWeek, 和 WeekNumberColumn 屬於未風格化的calendar視圖
CheckBox CheckBox    
ComboBox ComboBox    
ExclusiveGroup ActionGroup,
ButtonGroup
(Qt Quick Controls 2)
Qt Quick Controls 2: ActionGroup 和 ButtonGroup 提供相似的功能
GroupBox GroupBox    
Label Label    
Menu Menu Menu
(Qt Labs Platform)
Qt Quick Controls 1: Menu是在Qt平台抽象層提供實現的平台上原生的。其他平台使用基於QML的頂級菜單彈出窗口。菜單支持傳統的桌面風格聯級子菜單,但是在嵌入式Linux上不管用,因為EGLFS不支持多個頂級窗口。
Qt Quick Controls 2: Menu是非原生、基於Item的,而是堆疊在應用程序內容之上的彈出窗口。因此,菜單彈出窗口被限制在窗口邊界內。Menu完全可由QML和Qt Quick定制樣式,並且可以允許添加任何的Item。傳統桌面的特性(如聯級子菜單和可視鍵盤快捷鍵)都不支持。
Qt Labs Platform: Menu是一個實驗性的本地菜單,在不支持Qt平台抽象層提供實現的平台上,它會fallback到Qt Widgets。
MenuBar MenuBar MenuBar
(Qt Labs Platform)
Qt Quick Controls 1: MenuBar是在Qt平台抽象層提供實現的平台上原生的。其他平台使用堆疊在窗口頂部的基於QML的菜單欄項目。
Qt Quick Controls 2: MenuBar是基於QML並可以完全使用QML和Qt Quick定制樣式的非原生menubar。
Qt Labs Platform: MenuBar是一個實驗性的原生menubar。它只能用於支持Qt平台抽象層原生實現的平台。
MenuItem,
MenuSeparator
MenuItem,
MenuSeparator
MenuItem,
MenuSeparator
(Qt Labs Platform)
Qt Quick Controls 1: MenuItem 和 MenuSeparator在支持Qt平台抽象層實現的平台上是原生的。其他平台使用基於QML的menu item和separator。
Qt Quick Controls 2: MenuItem 和 MenuSeparator是基於QML並完全可用QML和Qt Quick定制樣式的非原生item。
Qt Labs Platform: MenuItem and MenuSeparator是實驗性的原生menu item和separator
ProgressBar ProgressBar    
RadioButton RadioButton    
ScrollView ScrollView    
Slider Slider    
SpinBox SpinBox    
SplitView    
StackView,
StackViewDelegate,
Stack
StackView   Qt Quick Controls 2: StackView通過一個單獨的StackView類型提供可定制的轉換和附加屬性。
StatusBar ToolBar
(Qt Quick Controls 2)
Qt Quick Controls 2: ApplicationWindow允許分配任何的item或者控件比如ToolBar作為header或者footer。
Switch Switch    
TabView,
Tab
TabBar,
TabButton
(Qt Quick Controls 2)
Qt Quick Controls 2: TabBar 和 TabButton 提供了相似的函數,可以用來構建tabbed views。
TableView    
TextArea TextArea   Qt Quick Controls 1: TextArea 繼承於ScrollView,因此它始終是個可滾動的editor。
Qt Quick Controls 2: TextArea 是一個可選擇性附加到Flickable以提供滾動功能的簡單多行editor。這就允許TextArea用於可滾動的頁面而不會出現嵌套的可滾動區域,解決了可用性問題。
TextField TextField    
ToolBar ToolBar    
ToolButton ToolButton    
TreeView    
Qt Quick Dialogs Qt Quick Controls 2 備選方案 備注
Dialog Dialog Qt Quick Dialogs: Dialog可以是一個頂層窗口或者是一個基於Item的彈出內容,這取決於所在的平台是否支持多個頂層窗口。 
Qt Quick Controls 2: Dialog不是頂層窗口,而是堆疊在程序內容之上的基於Item的彈出內容,因此,dialog會被限制在窗口范圍內。
ColorDialog,
FileDialog,
FontDialog,
MessageDialog
ColorDialog,
FileDialog,
FolderDialog,
FontDialog,
MessageDialog
(Qt Labs Platform)
Qt Quick Dialogs: Dialog在支持Qt平台抽象層實現的平台上是原生的.其他平台上使用Qt Widgets或者基於QML的dialog,這取決與其所在的平台是否支持多個頂層窗口。
Qt Labs Platform: 實驗性的原生dialog,在不支持Qt平台抽象層實現的平台上,fallback到Qt Widgets。
Qt Quick Extras Qt Quick Controls 2 備選方案 備注
CircularGauge    
DelayButton DelayButton    
Dial Dial    
Gauge    
Picture    
PieMenu    
StatusIndicator    
ToggleButton    
Tumbler,
TumblerColumn
Tumbler   Qt Quick Extras: Tumbler可以包含多列。 
Qt Quick Controls 2: Tumbler代表一個單獨的滾輪。多列的可以由多個Tumbler排列在一起組成。
之前沒有的 Qt Quick Controls 2 備選方案 備注
AbstractButton    
ActionGroup ExclusiveGroup
(Qt Quick Controls 1)
Qt Quick Controls 1: ExclusiveGroup 提供類似功能
ButtonGroup ExclusiveGroup
(Qt Quick Controls 1)
Qt Quick Controls 1: ExclusiveGroup 提供類似功能
CheckDelegate    
Container    
Control    
Drawer    
Frame    
ItemDelegate    
Page    
PageIndicator    
Pane    
Popup    
RadioDelegate    
RangeSlider    
RoundButton    
ScrollBar,
ScrollIndicator
ScrollView
(Qt Quick Controls 1)
Qt Quick Controls 1: ScrollView提供了類似的功能。它結合了水平跟豎直的scrollbar,還有環繞這scroll view的背景頁面。
StandardPaths
(Qt Labs Platform)
Qt Quick Dialogs: FileDialog提供了方便讀取大部分標准路徑的快捷屬性。
Qt Labs Platform: StandardPaths提供了獨立的類型以提供訪問標准路徑的方法。
SwipeDelegate    
SwipeView    
SwitchDelegate    
SystemTrayIcon
(Qt Labs Platform)
Qt Labs Platform: SystemTrayIcon 是一個實驗性的系統原生的system tray icon。在不支持Qt平台抽象層實現的平台上會fallback到Qt WIdgets。
TabBar,
TabButton
TabView
(Qt Quick Controls 1)
Qt Quick Controls 1: TabView提供了類似的方法。它由tab bar,背景和圍繞tab的頁面組成。
ToolSeparator    
ToolTip   Qt Quick Controls 1: Button 和 Action有內建的基於Qt Widgets的tooltips。
Qt Quick Controls 2: ToolTip可以附加到任何的Item上。

原文鏈接

 

https://blog.csdn.net/MatchYang/article/details/79302172


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM