如何向QAbstractView添加其他数据?

时间:2017-09-11 15:25:39

标签: python pyqt5

这些问题基于使用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中,它可以作为容器使用。 我的问题:

  1. 为什么我的dbIndex的UserRole没有存储?
  2. 我是否在数据库中执行错误的实现或记录集?
  3. 并且,如果是:处理记录集或任何其他附加数据的正确方法是什么?

0 个答案:

没有答案