第15.21節 PyQt(Python+Qt)入門學習:QListView的作用及屬性詳解

一、概述

QListView是從QAbstractItemView 派生的類,實現了QAbstractItemView類定義的接口 ,是Model/View架構中的視圖類之一,是Qt模型/視圖框架的一部分,提供基於模型的的列表模式或圖標模式視圖。

QListView將存儲在模型中的項顯示爲簡單的沒有父子層次的列表或圖標集合,視圖不顯示水平或垂直標題,若要顯示具有水平標題的項目列表,需要改用QTreeView或QTableView。

二、QListView相關的屬性

QListView對應部件在Qt Designer的Item Views(Model-Based)部件欄中的List View部件,在Designer中可設置的屬性包括batchSize、flow、gridSize、isWrapping、layoutMode、modelColumn、movement、resizeMode、selectionRectVisible、spacing、uniformItemSizes、viewMode、wordWrap十三項。

2.1、layoutMode屬性和batchSize屬性

layoutMode屬性和batchSize屬性用於控制視圖中數據加載過程中是立即展示還是按批展示。

2.1.1、batchSize屬性

該屬性是在layoutMode屬性設置爲Batched時,用於控制每個批量的數量,缺省值爲100,可以通過方法batchSize()、setBatchSize(int batchSize)來進行訪問或設置。

2.1.2、layoutMode屬性

QListView的layoutMode屬性用於控制視圖中數據項的排列是立即進行還是延遲進行。對應類型爲枚舉類型QListView.LayoutMode,其取值及含義如下:

  • SinglePass:值爲0,視圖中的項立即排列
  • Batched:值爲1,表示視圖中的數據項在事件處理時是按批來進行排列展示,具體每批的項數量由屬性batchSize定義。這樣就可以在剩餘數據項項目被按批次排列的同時,立即查看已經排列好的可見項目並與之交互。

layoutMode屬性可以通過方法layoutMode()、setLayoutMode(LayoutMode mode) 來訪問或設置layoutMode屬性。

2.2、flow屬性

QListView的flow屬性用於控制視圖中的數據排列方向,其類型爲枚舉類型QListView.Flow,相關取值及含義如下:

  • LeftToRight:取值爲0,表示數據項從左至右排列

  • TopToBottom:取值爲1,表示數據項從上至下排列

該屬性默認是TopToBottom,可以通過方法flow() 、setFlow(Flow flow)訪問該屬性。

注意:

在視圖已經可見的情況下,設置該屬性的值會導致視圖中的數據項重新排列。

2.3、gridSize屬性

QListView的gridSize屬性用於控制視圖中數據項排列所在網格的大小,gridSize默認值是空,這意味着沒有網格,數據項的排列不是按網格安排。將此屬性設置爲非空大小將開啓網格佈局。

在視圖可見情況下設置此屬性將會導致視圖中的數據項重新排列,在數據量較多的情況下會帶來較大的開銷。

可以使用gridSize()、setGridSize(const QSize size)來訪問或設置該屬性。

注意:

該屬性還與視圖中數據項的移動控制有關,當視圖的movement屬性設置爲QListView.Snap時,數據項移動時將對齊到指定網格。

2.4、isWrapping屬性

QListView的isWrapping屬性用於控制視圖中的數據項項佈局在可見區域中沒有足夠空間時是否應換行。以下是兩種佈局方向情況下無足夠可見空間展示數據項時進行換行展示的案例:

  • LeftToRight佈局情況下的數據項排列換行案例
    在這裏插入圖片描述
  • TopToBottom佈局情況下的數據項排列換行案例
    在這裏插入圖片描述
  • TopToBottom佈局情況下的數據項排列不換行案例

在這裏插入圖片描述

該屬性可以通過方法isWrapping()、setWrapping(bool enable)來進行訪問或設置。

注意:

在視圖可見時isWrapping屬性的設置將導致視圖中項目再次佈局。

2.5、modelColumn屬性

QListView的modelColumn屬性用於控制視圖中展現model中哪一列數據,缺省值爲0,即展現第一列數據。

可以通過modelColumn()、setModelColumn(int column)來訪問和設置該屬性。

2.6、movement屬性

QListView的movement屬性用於控制在視圖中怎麼移動數據項,其類型爲枚舉類型QListView.Movement,有如下取值:

  • Static:對應值爲0,表示數據項不能被移動
  • Free:對應值爲1,表示數據項可以隨意移動
  • Snap:對應值爲2,在gridSize屬性不爲空的情況下表示數據項移動時會按指定網格對齊

2.7、resizeMode屬性

resizeMode屬性用於控制調整視圖大小時是否再次排列視圖中的數據項,其類型爲枚舉類型 QListView.ResizeMode,取值及含義如下:

  • Fixed:對應值爲0,在調整視圖大小時不會再次排列數據項
  • Adjust:對應值爲1,在調整視圖大小時,數據項將再次排列

默認情況下,此屬性設置爲“Fixed”。可以通過方法resizeMode()、setResizeMode(ResizeMode mode)來訪問或設置該屬性。

2.8、spacing屬性

QListView的spacing屬性用於控制視圖佈局中數據項周圍填充的空白空間的大小。缺省值爲0,可以通過方法spacing()、setSpacing(int space)來訪問和設置spacing屬性。

注意:
  • 當網格佈局生效時(如屬性gridSize設置了非空值)spacing不起作用;
  • 在視圖可見時設置spacing屬性會導致視圖中數據項重新排列。

2.9、viewMode屬性

QListView的viewMode屬性用於控制QListView的視圖模式,該屬性類型爲枚舉類型QListView.ViewMode,有如下取值:

  • ListMode:對應值爲0,在相關屬性未設置的情況下,視圖中的數據項排列方向控制屬性flow的值爲TopToBottom,movement值爲Static,數據項佔用較小的空間
  • IconMode:對應值爲1,在相關屬性未設置的情況下,視圖中的數據項排列方向控制屬性flow的值爲LeftToRight,movement值爲Free,數據項佔用較大的空間

設置該屬性將改變QListView在應用中未設置的屬性以適應視圖要設置的模式,除非調用clearPropertyFlags(),否則不會更改應用已設置的QListView相關的屬性。

設置viewMode視圖模式將根據選定的movement屬性來啓用或禁用拖放,對於ListMode,默認movement 屬性值是Static (禁用拖放);對於IconMode,默認movement 屬性值是Free (啓用拖放)。

2.10、uniformItemSizes屬性

uniformItemSizes屬性用於控制視圖中所有項是否具有相同大小,只有在確保視圖中的所有項都具有相同的大小時,才應將此屬性設置爲True。

統一視圖中所有項統一大小,可以使得視圖在進行項排列時無需複雜計算,這使視圖數據項排列時性能得到一些優化。

uniformItemSizes屬性的缺省值爲False,可以通過uniformItemSizes()、setUniformItemSizes(bool enable)進行屬性的訪問或設置。

2.11、wordWrap屬性

wordWrap屬性用於控制視圖中數據項文本的換行策略。如果此屬性爲True,則在數據項文本中分詞的適當處進行換;否則數據項文本不進行換行處理。默認情況下,此屬性爲True。

請注意,即使啓用了換行,單元格也不會展開以適合所有文本,如果數據項的空間無法展示所有內容,則會根據textElideMode設定的省略號模式在文本中插入省略號。

該屬性可以通過wordWrap()和setWordWrap(bool wordWrap)來進行訪問和設置。

2.12、itemAlignment屬性

QListView的itemAlignment屬性用於控制每個數據項的對齊方式,其類型爲枚舉類Qt.Alignment或Qt.AlignmentFlag,其中 Qt.AlignmentFlag是對齊標記,它包括水平對齊標記、垂直對齊標記、兩維對齊標記、以及右對齊應用模式中的組合標記:

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

對於對齊模式的掩碼常量,沒有找到相關資料說明其用途,老猿估計是用於對該屬性的賦值數據通過與掩碼常量進行與操作進行過濾使用,防止非正常對齊標記的數據出現。

注意:
  • Qt.Alignment是使用Qt.AlignmentFlag對應的對齊標記通過或(|)操作組合而成的,但如果組合時出現衝突的標記如水平對齊出現了兩種不同的方式則該組合無效。
  • 只有在Flow屬性爲TopToBottom、isWrapping屬性爲True且viewMode屬性爲ListMode時才支持操作此屬性
  • QListView的itemAlignment屬性是Qt5.12的版本才引入的,低版本不支持
屬性訪問方法:

itemAlignment屬性默認對齊方式爲0,這意味着每個數據項將完全填充其所在單元格。可以通過方法itemAlignment()和setItemAlignment(Qt.Alignment)來訪問或設置。

三、小結

本節詳細介紹了QListView相關的屬性,但專欄:使用PyQt開發圖形界面Python應用除了本文中介紹的內容外,還有更多的細節,歡迎大家訂閱支持老猿,謝謝!

老猿Python,跟老猿學Python!

發佈了623 篇原創文章 · 獲贊 3419 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章