J'essaie de sélectionner des éléments de vue d'élément abstrait dans Qt étant donné leurs valeurs de chaîne. J'ai déjà écrit la fonction qui trouve QModelIndex
en fonction de son contenu de chaîne.Sélectionne par programme QModelIndexes dans QAbstractItemView
J'essaie maintenant de mettre tous ces QModelIndex
es que je trouve dans la sélection unique. Ma signature de la méthode:
// Will select all items that contain any of the strings
// given by 1st argument
virtual void selectItems(const QStringList&) override;
Ma mise en œuvre ressemble à ceci (mais ne fonctionne pas correctement):
void QAbstractItemViewResult::selectItems(const QStringList& list)
{
if(list.size() > 0) {
QItemSelectionModel::SelectionFlags flags = QItemSelectionModel::ClearAndSelect;
QItemSelection selection;
Q_FOREACH(const QString text, list) {
// Find index by string is a method I implemented earlier
// The method works correctly
QModelIndex index(findIndexByString(targetView_, list[0]));
if(index.isValid()) {
// This is an attempt to add model indx into selection
selection.select(index, index);
}
}
// When the selection is created, this should select it in index
targetView_->selectionModel()->select(selection, flags);
}
}
Le problème est, ce code sélectionne toujours seulement le premier élément de la liste, par exemple. pour "B1","C1","A1"
il ressemble à ceci:
Le tableau a permis la sélection multiple:
Alors, comment puis-je sélectionner plusieurs éléments correctement programme? Si vous avez besoin du code findIndexByString
, il peut être trouvé ici: https://github.com/Darker/qt-gui-test/blob/master/results/QAbstractItemViewResult.cpp#L5
Les drapeaux ne sont pas utilisé dans la boucle. –
Vous avez raison. J'ai édité ma réponse. – rom1v
Merci beaucoup. Le problème principal était probablement le 'list [0]' restant. Au fait, 'ClearAndSelect' fonctionne bien. Je ne suis pas à 100% mais je pense que "Select" ajouterait une nouvelle sélection à la sélection existante. –