Bonjour à tous,

Je suis en train de faire une QGraphics view dans laquelle j'affiche une QGraphicsGridLayout remplie par des QGraphicsWidget, la construction est faite comme suit:

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
 
QWidget widget = new QWidget();
 
mainVerticalLayout = new QVBoxLayout(widget);
 
headerGraphicsView = new QGraphicsView(layoutWidget);
[...]
mainVerticalLayout->addWidget(headerGraphicsView);
 
mainView = new QGraphicsView(widget);
 
scene = new QGraphicsScene(mainView->sceneRect(), mainView);
mainView->setScene(scene);
 
containerWidget = new QGraphicsWidget();
 
gridLayout = new QGraphicsGridLayout(containerWidget);
 
containerWidget->setLayout(gridLayout);
scene->addItem(containerWidget);
 
int i = 0, row = 0, col = 0;
for (i = 0; i < itemsList.size(); i++)
{
	gridLayout->addItem(itemList[i], row, col);
	if (col == MOSAIC_WIDTH - 1)
	{
		row++;
		col = 0;
	}
	else
	{
		col++;
	}
}
 
footerGraphicsView = new QGraphicsView(widget);
[...]
mainVerticalLayout->addWidget(footerGraphicsView);
Et la mise à jour se fait comme suit:

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
int i = 0;
// Je vire les items du layout
for (i = gridLayout->count() - 1; i >= 0; i--)
{
QGraphicsWidget* item = dynamic_cast<QGraphicsWidget*>(gridLayout->itemAt(i));
	if (item != NULL)
	{
		gridLayout->removeAt(i);
		scene->removeItem(item);
	}
}
 
row = 0, col = 0;
// Puis je le remplie avec les nouveaux
for (i = 0; i < itemsList.size(); i++)
{
	gridLayout->addItem(itemList[i], row, col);
	if (col == MOSAIC_WIDTH - 1)
	{
		row++;
		col = 0;
	}
	else
	{
		col++;
	}
}
Mais j'ai un problème lorsque je réduit le nombre d'items dans gridLayout lors de la mise à jour, la taille reste aux valeurs de la plus grande taille que la scene ait eue (dans les screenshots seul le mainVerticalLayout est affiché pour un soucis de taille d'image):

Si la plus grande taille était comme suit:



Ensuite je réduit le nombre d'éléments, gridLayout semble étiré pour rentrer complètement dans la vue:



Lors de la mise à jour j'ai essayé toutes sorte d'updates (update de la QGraphicsScene, update et updateGeometry de la QGraphicsView, ...) mais rien n'y fait.

J'ai aussi essayé de delete/reconstruire le QGraphicsGridLayout, là le QGraphicsGridLayout n'est plus étiré mais la scrollbar est toujours comme pour la plus grande taille:



Finalement j'ai essayé de delete/reconstruire la QGraphicsScene, là j'ai pareil qu'avec le dernier screenshot (layout correctement construit mais scrollbar toujours grande), et enfin delete/reconstruire la QGraphicsView et même comportement.

Est-ce que quelqu'un a une idée de ce qu'il faut updater/faire pour que l'affichage soit correct?

Merci.
Gluttony.