2009-09-24 7 views
2

J'ai un QStandardItemModel avec plusieurs 100 000 enregistrements de données, et un QSortFilterProxyModel en plus pour les capacités de filtrage et de tri. Je souhaite supprimer un nombre important d'enregistrements, disons 100 000, en fonction de la valeur de l'une des colonnes. L'implémentation en cours effectue une itération sur le modèle source, teste la valeur dans la colonne appropriée et appelle removeRow (0). Cela s'avère être une approche extrêmement lente, je ne sais pas pourquoi (j'ai déjà désactivé la signalisation du modèle source et du trifiltreproxymodel).stratégie de suppression de ligne la plus efficace pour QStandardItemModel

Qu'est-ce qu'une approche plus efficace?

Le module QSortFilterProxyModel peut-il aider, par ex. en créant une sélection d'enregistrements à supprimer et en utilisant removeRows?

Merci, Andreas

Répondre

1

QAbstractItemModel::removeRows() est un candidat, à condition que les lignes sont contiguës. Si le modèle est trié par la colonne que vous utilisez pour effectuer le test de suppression, vous devriez pouvoir l'utiliser.

1

L'approche la plus efficace consisterait à implémenter votre propre modèle avec l'interface QAbstractItemModel au lieu d'utiliser QStandardItemModel. Vous pouvez ensuite créer des index personnalisés qui vous aideront à augmenter les performances tout en supprimant des éléments.

Questions connexes