Bonjour à tous,

lorsque je charge un nouveau QSqlQueryModel dans mon QTableView j'obtiens des bugs d'affichage sur les couleurs du fond des lignes du tableau.

Il est vrai que mon modèle contient 40 colonnes et plus de 40 000 lignes en moyenne et que parfois il peut en contenir jusqu'à 150 000.

Dans mon modèle j'utilise en plus un code pour changer la couleur du fond des lignes en fonction du contenu de la colonne 38.
Voici le code utilisé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
QVariant ModeleFenTrafic::data(const QModelIndex &index, int role) const {  
     static std::set<int> ligneVertes;
     switch(role) {
         case Qt::BackgroundRole:
 
         int ligneCourante=index.row();
         int lignePrecedente=ligneCourante-1;
         if(lignePrecedente<=0) lignePrecedente=0; 
         if(ligneSuivante>=index.model()->rowCount()) ligneSuivante=index.model()->rowCount(); 
         // je ne m'intéresse qu'à la colonne 38 
         QString valeurPrecedente=index.model()->data(index.model()->index(lignePrecedente,38)).toString();
         QStringvaleurCourante=index.model()->data(index.model()->index(ligneCourante,38)).toString(); 
         if(valeurCourante==valeurPrecedente) 
         {  
              std::set<int>::iterator it=find(lignesVertes.begin(),lignesVertes.end(),lignePrecedente);
             if(it!=lignesVertes.end())
             { 
                  lignesVertes.insert(index.row()); 
                  QBrush newBackground(Qt::green); 
                  return newBackground; 
             } 
             else 
             { 
                  QBrush newBackground(Qt::blue); 
                  return newBackground; 
             } 
         } 
         else 
         {
             std::set<int>::iterator it=find(lignesVertes.begin(),lignesVertes.end(),lignePrecedente);
             if(it!=lignesVertes.end())
            { 
                   QBrush newBackground(Qt::blue); 
                   return newBackground; 
               }
               else 
               {
                   lignesVertes.insert(index.row()); 
                   QBrush newBackground(Qt::green); 
                   return newBackground; 
                } 
          } 
          break;
     } 
return QSqlQueryModel::data(index,role); 
}


pour mettre mon QTableView à jour je fais simplement
tableau->setModel(monModele);

Mais là, le modèle est bien chargé, les données sont les bonnes et tout est bien raffraichi dans mon QTableView sauf la couleur des lignes après environ 20 000 lignes (tout se passe bien par contre pour les 20 000 premières lignes environ)

Après ces 20 000 premières lignes les couleurs de fond des lignes ne correspondent plus.
Toutefois si je refais remonter les lignes du QTableView avec la molette de la souris, puis que je refais descendre les lignes pour les afficher à nouveau, là, elles sont de la bonne couleur.
Je pense donc à un problème de raffraichissement de l'affichage.

Comment résoudre ce souci selon vous? Quelqu'un aurait des pistes?
Merci à vous