这些问题基于使用Pyqt5.8和python 3.6的原始editabletreemodel.py。我必须添加来自另一个条目(数据库)的数据,这些数据来自dictonary,看起来像
dataSet = {'level':0,'dbID':549,'parent_ID':3,'short_name':'Line5', 'long_name':'','order':4}
short_name应显示在第0列中,long_name应显示在第1列中,并且应保留数据以便在QtUserRole中写回数据库。我通过函数调用插入数据:
TreeFunction.insertRow(self,self.ui.treeViewStructure, dataSet)
将在
中分割数据(此功能稍作修改)def insertRow(self,view,dataSet):
display = dataSet.short_name
dbindex = dataSet
index = view.selectionModel().currentIndex()
model = view.model()
if not model.insertRow(index.row()+1, index.parent()):
return
TreeFunction.updateActions(self,view)
for column in range(model.columnCount(index.parent())):
child = model.index(index.row()+1, column, index.parent())
model.setData(child, display, Qt.EditRole)
model.setData(child, dbindex, Qt.UserRole)
我通过原始的 .data 函数检索数据:
display = self.ui.treeViewStructure.selectionModel().currentIndex().data(Qt.DisplayRole)
dbindex = self.ui.treeViewStructure.selectionModel().currentIndex().data(Qt.UserRole)
print("item clicked DisplayRole:",display)
print("item clicked UserRole:", dbindex)
结果:
项目点击了DisplayRole:Line5
项目点击了UserRole:无
Qt Assistant中的文档说:
Constant Qt :: UserRole 0x0100可用于的第一个角色 特定应用目的。
对于用户角色,由开发人员决定使用哪些类型 并确保组件在访问时使用正确的类型 设置数据。
据我所知,我可以将任何类型的数据(int,string,dict,image,binary,...)存储在QtUserRole中,它可以作为容器使用。 我的问题: