QML官方文檔:Qt Quick Controls 1和2對比


Qt Quick Controls有1和2兩個版本,在程序中會看到好多1和2版本混合使用的情況。

原文:https://doc.qt.io/qt-5/qtquickcontrols2-differences.html

參考:QtQuick.Controls 2與 QtQuick.Controls的區別和使用

 

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:

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

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

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

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

  1.非官方支持,但是技術上可以通過私有API實現

  2.只有theme是可以在運行時切換的,而style則是固定的

  3.性能上可能不是最好的

 

遷移Qt Quick Controls的代碼

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

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

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

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

qml Code 
1
2
3
4
5
 
Button {
    contentItem: Label {
         // ...
    }
}

 

准備遷移

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

qml Code 
1
2
3
4
 
import   "controls"  as Controls
Controls.Button {
    ...
}

 

類型對照表

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


免責聲明!

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



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