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