2016-05-10 6 views
0

J'ai un TableView QML où j'affiche des données d'un modèle implémentant QAbstractItemModel. Mais au lieu de l'utiliser directement, je l'enveloppe dans un QSortFilterProxyModel pour les fonctions de tri et de filtrage.Mapper la ligne QML TableView sur le dos activé à QModelIndex

Maintenant, si par ex. avoir une vue fortement filtrée et activer une ligne Je veux faire quelque chose avec l'élément de modèle activé. Mais le gestionnaire onActivated me donne uniquement le numéro de ligne sur lequel j'ai cliqué, mais je pense que j'ai besoin de QModelIndex pour interroger le modèle sous-jacent de l'élément. Je ne peux pas non plus implémenter quelque chose comme model.get (row) puisque le modèle a maintenant le mappage des lignes aux index.

Répondre

0

J'ai compris comment cela devait fonctionner. Vous implémentez index et les données dans vos sortfilterproxymodel personnalisés comme ceci:

@pyqtSlot(int, int, result=QModelIndex) 
@pyqtSlot(int, int, QModelIndex, result=QModelIndex) 
def index(self, row, column, parent=QModelIndex()): 
    return super().index(row, column, parent) 

@pyqtSlot(QModelIndex, int, result=QVariant) 
def data(self, index, role=Qt.DisplayRole): 
    return super().data(index, role) 

Maintenant, vous pouvez appeler par exemple comme ceci dans QML

property var qt_UserRole: 256 // FIXME: Qt.UserRole is not exported 
model.data(model.index(row, 0), qt_UserRole + 1)