J'utilise un QSortFilterProxyModel pour filtrer les résultats d'un QAbstractListModel. Cependant, je voudrais retourner une première entrée qui n'est pas présente dans le modèle original, c'est-à-dire, c'est artificiel.QSortFilterProxyModel retourne la ligne artificielle
C'est ce que j'ai jusqu'à présent:
class ActivedAccountModel(QSortFilterProxyModel):
def __init__(self, model, parent=None):
super(ActiveAccountModel, self).__init__(parent)
self.setSourceModel(model)
self.setDynamicSortFilter(True)
def data(self, index, role=Qt.DisplayRole):
account_info = super(ActiveAccountModel, self).data(index, Qt.UserRole).toPyObject()
if role == Qt.DisplayRole:
return account_info.name
elif role == Qt.UserRole:
return account_info
return None
def filterAcceptsRow(self, source_row, source_parent):
source_model = self.sourceModel()
source_index = source_model.index(source_row, 0, source_parent)
account_info = source_model.data(source_index, Qt.UserRole)
return isinstance(account_info.account, Account) and account_info.account.enabled
Ceci renvoie une liste sous forme de:
Account 1
Account 2
...
Id » comme retourner un élément supplémentaire au début du retour liste des éléments f:
Extra Element
Account 1
Account 2
...
J'ai essayé de ré-écrire rowCount pour retourner le vrai rowCount() + 1, mais en quelque sorte, je serais besoin de décalage tous les éléments afin de retourner cet élément artificiel à l'index 0, et je suis un peu perdu là-bas.
Une idée? Je n'ai pas trouvé d'exemple de code lié jusqu'à présent ... Merci!
Je ne suis pas sûr que le QSortFilterProxyModel est le meilleur endroit pour essayer de le faire. Les termes opératifs étant _sort_ et _filter_. Je pense que faire cela dans un modèle personnalisé serait mieux. –