Bonjour à tous,
Je suis en train de personnaliser l'affichage d'une QTableView en utilisant des QStyledItemDelegate.
Mon but est d'afficher une liste de 3 doubles (coordonnées 3D d'un point) de la manière suivante:
- ( x, y, z ) en mode visualisation
- ( QDoubleSpinBox(x), QDoubleSpinBox(y), QDoubleSpinBox(z) ) en mode édition
En pratique j'arrive à peu prêt à avoir ce comportement, seulement, le contenu n'est pas adapté à la taille de la colonne:
Pièce jointe 426296
Je me doute que le problème vient du sizeHint mais je ne vois pas comment corriger ce problème.
Voici la méthode paint de mon delegate:
Pour la méthode sizeHint, je ne suis pas sûr de quoi mettre: pour le moment, j'ai mis la taille d'un caractère et le multiplier par le nombre de caractère dans le QString associé au Point3DLabel. Cependant, ça ne semble pas fonctionner.Code:
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 void Point3DDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const { if (index.data().canConvert<Point3DLabel>()) // Classe contenant 3 double et un QString { if (option.state & QStyle::State_Selected) { painter->fillRect(option.rect, option.palette.highlight()); } painter->save(); painter->setRenderHint(QPainter::Antialiasing, true); QRect rect = option.rect; Point3DLabel label = qvariant_cast<Point3DLabel>(index.data()); int yOffset = (rect.height() +20) / 2; painter->translate(rect.x(), rect.y() + yOffset); painter->drawText(0, 0, label.text()); painter->restore(); } else { QStyledItemDelegate::paint(painter, option, index); } }
Quelqu'un a une idée et me dire ce que je fais mal?
Merci.
PS: J'avais une autre idée qui me plait beaucoup moins: sauvegarder dans mon model seulement un QString et "parser" celui ci quand je souhaite éditer le point, faire des calculs, etc...