2015-03-26 1 views
1

Je fais un formulaire qui contient un QListView. Il est peuplé de base de données avec ce code:Comment remplir un QListView avec des valeurs et des données d'affichage?

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

Mon QListView est nommé retourne fonction LISTUSER et SELECT_USERS_ACCOUNTS() de données créées par id select, le nom de table_user, je dois stocker row [0] (colonne id dans la table_user) aussi parce que lorsque l'utilisateur va cliquer sur un élément dans le QListView. Je veux capturer cet Id. Merci d'avance.

Répondre

2

Dans QStandardItem, les données pour différents rôles peuvent être stockées par setData(data, role). Les données stockées sont renvoyées par data(role).

Rôles> = 256 (0x100) sont UserRoles, voir documentation

vous pouvez donc stocker l'id par

item.setData(row[0],256) 

et lui demander par

item.data(256) 

modifier 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 
+0

Je suis nouveau chez pyqt, s'il vous plaît comment puis-je changer mon code, merci d'avance. –

+0

voir ma réponse éditée –

+0

merci beaucoup. Je l'ai résolu avec votre réponse. –