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:
Nom : Capture d’écran 2018-11-12 à 10.38.53.png
Affichages : 218
Taille : 64,6 Ko

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:

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
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);
	}
}
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.

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...