2017-08-07 6 views
2

Comment trouver l'index (c'est-à-dire les numéros de ligne et de colonne) d'une cellule contenant un QString dans QTableView en utilisant QT C++?Comment trouver l'index d'une cellule contenant une valeur et mettre en évidence toutes ces cellules dans QTableView

(P.S.:Without cliquant sur la cellule QTableView)

+0

Vous voulez rechercher et trouver une valeur dans le tableau? – aghilpro

+0

Après la recherche je veux la position de la valeur dans la table – annie

+0

je mets à jour ma réponse. cette ligne a ajouté: '((QStandardItemModel *) modelIndex.model()) -> élément (modelIndex.row(), index) -> setData (QBrush (Qt :: vert), Qt :: BackgroundRole);' – aghilpro

Répondre

1

Vous pouvez utiliser la fonction findItems() pour trouver votre cellule. Function renvoie une liste d'éléments correspondant au texte donné, en utilisant les indicateurs donnés, dans la colonne donnée.

for (int index = 0; index < model->columnCount(); index++) 
{ 
    QList<QStandardItem*> foundLst = model->findItems("YourText", Qt::MatchExactly, index); 
} 

Si vous voulez obtenir l'index de l'élément trouvé et mettre en évidence en utilisant ce code:

for (int index = 0; index < model->columnCount(); index++) 
{ 
    QList<QStandardItem*> foundLst = model->findItems("YourText", Qt::MatchExactly, index); 
    int count = foundLst.count(); 
    if(count>0) 
    { 
      for(int k=0; k<count; k++) 
      { 
       QModelIndex modelIndex = model->indexFromItem(foundLst[k]); 
       qDebug()<< "column= " << index << "row=" << modelIndex.row(); 
       ((QStandardItemModel*)modelIndex.model())->item(modelIndex.row(),index)->setData(QBrush(Qt::green),Qt::BackgroundRole); 
      } 
    } 
} 

Plus d'info:

QTableView: La classe QTableView fournit une implémentation modèle par défaut/vue une vue de la table. La classe QStandardItemModel fournit un modèle générique pour stocker des données personnalisées.

+0

Merci @aghilpro, votre solution a résolu mon problème. – annie

+0

@annie votre accueil mon ami. – aghilpro

+0

Votre solution renvoie le même index pour plusieurs occurrences de la même chaîne. Par exemple, si la table contient la chaîne "apple" dans les rangées 2 et 4, le programme retourne l'index comme 2 pour les deux occurrences, mais je veux que les index des deux occurrences soient imprimés, c.-à-d. . Pouvez-vous me dire comment je peux faire ça? – annie