Bonjour,
J'ai un souci pour repaint() une QTableView complète, en l'ordonnant depuis l'editorEvent d'un delegate. Traduction:
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 bool MyTableViewDelegate::editorEvent ( QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index ) { // BLABLABLA QTableView* p = qobject_cast< QTableView* > ( parent() ); p->repaint(); return l_result; // osef }
Ce tableau contient des cases à cocher, avec exclusivité : cocher une case décoche les autres, c'est géré dans le modèle (d'où l'appel du repaint sur toute la table).
Jusqu'à la modification qui va suivre, ceci fonctionne parfaitement. J'ai des tableaux comme ça dans une fenêtre, parfait.
J'ai alors eu besoin de créer des widgets "popup", affichés devant tout le monde, et contenant ces mêmes QTableView.
Je les crée en donnant pour parent QApplication::activeWindow(). C'est pour ça que je parle de branche parallèle, car chaque "popup" est fille du plus haut de la hiérarchie, ceci afin d'apparaitre devant les autres et non d'être clippé par son créateur.
Problème : le repaint() ne fonctionne plus. Si je coche une case, la case précédemment cochée le reste visiblement. Mais si je clique ailleurs, ou fait n'importe quelle action (appui d'une touche, ...), il y a enfin mise à jour et la case se décoche. En gros l'appel forcé de repaint() est ignoré et ça repaint plus tard, dès la prochaine interaction.
Une idée ?
Partager