QStandardItemModel是QAbstractItemModel的派生类,用于在Model/View架构中存储自定义数据的通用模型,可以用于在任何支持QAbstractItemModel接口的view(例如QListView、QTableView和QTreeView,以及自定义视图)中作为数据存储。
QStandardItemModel可以用作标准Qt数据类型的数据存储Model。QStandardItemModel提供了一种经典的基于项的方法来处理模型中的数据。QStandardItemModel模型中的项对应类型必须为QStandardItem。
定义QStandardItemModel对象的方法:
方法一定义一个QStandardItemModel对象,未指定行数和列数,实际上构造的是一个空的QStandardItemModel对象,后续可以使用appendRow()、insertRow()在添加数据项。
方法二定义了一个指定行数和列数的QStandardItemModel对象,但具体数据项同样未初始化,可以通过setItem方法进行初始化。
在view对应的数据存储初始化时,通常创建一个空的QStandardItemModel对象,并使用appendRow()、insertRow()添加一行数据项。
对应语法如下:
Iterable[QStandardItem]
表示一个存储元素类型为QStandardItem的可迭代类型如列表,这样一次可以添加一行多个字段的数据使用item()方法访问QStandardItemModel对象中的项,语法如下:
通过item方法还可以返回指定行和列对应的数据项。
知道一个QStandardItemModel对象中的数据项以后,可以通过该数据项的text()方法获取对应数据的值。语法如下:
可以使用setItem()将数据指定到对应的行和列的位置,语法如下:
该方法将QStandardItemModel对象中对应行和列位置的数据项设置为新的参数item对应项,如果原来未指定项,则相当于数据项初始化,否则就是替换原有数据项。
如果一个QStandardItemModel对象中对应行和列位置的数据项已经设置,但需要修改该数据项数据的值,可以使用setText()来修改该数据项的值。语法如下:
其中参数text就是要修改数据的对应字符串值。
要删除QStandardItemModel对象中对应的数据,可以使用removeRow,语法如下:
参数row指明要删除的数据行,parent表示要删数据的父节点,对于树形视图来说需要使用,对于链表视图和表格视图用缺省值即可。
本案例实现了一个initViewData方法,将一个窗口的listView对象(对象名为Designer缺省名listView,没有修改)和tableView对象(对象名为Designer缺省名tableView,没有修改)使用同一个存储Model,model对象名为 self.itemModel ,设置为3列,3列数据组成为:数字序号+‘:‘+20个数字和空格字符串,行数为18行。
l = [(digit, ": ", (str(digit) + ' ') * 20) for digit in range(1, 10)]
self.itemModel = QtGui.QStandardItemModel()
self.itemModel.setColumnCount(3)
for line in l:
record = []
for col in line:
item = QtGui.QStandardItem(str(col))
record.append(item)
ret = self.itemModel.insertRow(0,record)
ret = self.itemModel.appendRow( record)
self.listView.setModel(self.itemModel)
self.tableView.setModel(self.itemModel)
运行截图如下:
可以看到只有前9行生成了数据,后9行无数据,因为代码中appendRow的数据是前面insertRow已经处理了数据项列表,不能重复插入,但对应插入导致Model的行数被扩充。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章