Search code examples
pythonpyqtqlistviewqstandarditemmodelqstandarditem

How to populate a QListView with value and display data?


I'm doing a form that contains a QListView. It's populated from database with this code:

model = QStandardItemModel(self.listUser)
for row in self.SELECT_USERS_ACCOUNTS():
    item = QStandardItem(str(row[1]))
    model.appendRow(item)
self.listUser.setModel(model)

My QListView is named listUser and SELECT_USERS_ACCOUNTS() function returns data created by select id,name from table_user, I need to store row[0] (id column in the table_user) too because when the user will click an item into the QListView. I want to capture this Id. Thanks in advance.


Solution

  • In QStandardItem data for different roles can be stored by setData(data, role). Stored data are returned by data(role).

    Roles >= 256 (0x100) are UserRoles, see documentation

    so you can store the id by

    item.setData(row[0],256)
    

    and ask it by

    item.data(256) 
    

    edit 31.03.2015:

    for row in self.SELECT_USERS_ACCOUNTS():
        item = QStandardItem(str(row[1]))
        # add userData to item
        item.setData(row[0],256)
        # item.setData(row[2], 257) and so on if there are further columns in row
        model.appendRow(item)
    
    self.listUser.setModel(model)
    self.listUser.clicked.connect(self.getUserData)
    
    def getUserData(self,index):
        item = self.model().item(index.row(),index.column())
        iId = item.data(256)
        # xyz = item.data(257) for further columns
        print(iId) # or do anything else