PyQt(Python+Qt)學習隨筆:model/view架構中的QStringListModel


一、QStringListModel介紹

QStringListModel是Qt提供的一個已經實現QAbstractItemModel相關接口的Model,適合於展示一系列字符串的簡單視圖如QListView對象和QComboBox對象。

QStringListModel提供了所有可編輯模型的標准函數,將字符串列表中的數據存儲為一個一列多行的模型。

使用index(int row, int column = 0, QModelIndex parent = QModelIndex())函數獲取與項對應的模型索引,使用flags(QModelIndex index)獲取項標志;使用data()函數讀取項數據,並使用setData()寫入項數據,使用rowCount()函數訪問模型數據的行數。

該模型可以用現有的字符串列表來構造,或者可以用setStringList()函數來設置字符串。字符串也可以用insertRows()函數以通常的方式插入,並用removeRows()刪除。字符串列表的內容可以使用stringList()函數檢索。

二、使用QStringListModel作為QListView的Model

使用QStringListModel作為QListView的Model的方法非常簡單,先創建QStringListModel實例對象,如果數據未存儲到Model中則將數據存儲到Model,然后再將QListView對象的Model設置為剛創建的Model實例。步驟如下:

2.1、 創建QStringListModel實例對象

實例對象創建有兩種方法:

  • 創建無數據的Model
    語法為:QStringListModel(QObject parent = None)
  • 創建Model同時初始化數據
    語法為:QStringListModel(strings,QObject parent = None)
    其中strings為要展示的字符串列表數據。

以上兩種方法的實例代碼:

self.model1 = QStringListModel()
strList = ["item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item9", "item10"]
self.model2 = QStringListModel(strList)

只是以上方法創建model后,model1中無數據,而model2中有數據

2.2、初始化model中的數據

如果創建的model中無數據,可以通過幾種方法初始化model中的數據:

  • 使用setStringList(str)方法完成初始化,示例代碼:
self.model1.setStringList(["item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item9", "item10"])
  • 使用insertRows()、index()、setData()方法組合實現
    insertRows是在model中插入空的數據記錄,只是占據了數據位置,但沒有實際的數據,需要通過setData來生成實際存儲的數據。這種組合方法沒有多大實際價值,具體方法的參數及含義在此不進行詳細介紹,請參考如下示例代碼:
        self.model = QStringListModel()
        self.model.insertRows(0,3)
        for i in range(4):
            index = self.model.index(i-1)
            self.model.setData(index,f"item{i}")
  • 使用視圖的setModel(model)方法將model和view建立連接
    示例代碼:
 self.listView.setModel(self.model)
2.3、示例代碼及運行截圖

本示例代碼使用先創建對象再使用setStringList方法初始化數據:

 def initStringListModel(self):
        strList = ["item1", "item2", "item3", "item4", "item5", "item6", "item7", "item8", "item9", "item10"]
        self.model = QStringListModel()
        self.model.setStringList(strList )
        self.listView.setModel(self.model)

運行截圖:
在這里插入圖片描述

老猿Python,跟老猿學Python!


免責聲明!

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



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