Bonjour,

Mon but est d'afficher de nombreuses(quelques centaines, voire un millier) images dans une QGraphicsScene, et de pouvoir me déplacer dans ma scène avec fluidité. J'ai donc crée une scène, dans laquelle j'ai ajouté 400 items (20*20) d'une taille de 128*128, et dont la représentation est une image de 128*128. Le problème est que lorsqu'on déplace les barres, le repaint des items ne se fait pas ou à moitié. Voici un code (tout en 1 fichier) qui compile et qui montre le problème.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <QtCore>
#include <QtGui>
 
class Tile:public QGraphicsItem{//représente un item de 128*128
 
public:
 
	Tile(QGraphicsItem* parent=0):QGraphicsItem(parent)
	{
	pix.load(":/images/timer.png");//load une image de 128*128
	//setCacheMode(QGraphicsItem::ItemCoordinateCache, QSize(128,128));//utilisation du cache, voire plus bas
	}
 
	void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 )
	{
			painter->drawPixmap(pos(),pix);
			//painter->drawEllipse(boundingRect()); //dessiner un cercle à la place du pixmap pour voir que ça fonctionne
	}
 
	QRectF boundingRect () const 
	{
			return QRectF(0,0,128,128);
	}
 
	QPixmap pix;
};
 
class Scene:  public QGraphicsScene{
 
	public:
	Scene(qreal a=-1280 ,qreal b=-1280,qreal c=2560 ,qreal d=2560):QGraphicsScene( a , b, c , d)
	{
	for(int x=-1280;x<1280;x+=128)
		for(int y=-1280;y<1280;y+=128)
		{
			Tile* tile = new Tile();
			tile->setPos(QPointF(x,y));
			addItem(tile);
		}
	}
 
};
 
class View: public QGraphicsView
{
	public:
		View():QGraphicsView()
		{
			setRenderHint(QPainter::Antialiasing, false);
			setDragMode(QGraphicsView::RubberBandDrag);
			setOptimizationFlags(QGraphicsView::DontSavePainterState);
			setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
			this->setScene(&scene);
 
		}
 
		Scene scene;
};
 
 int main(int argc, char *argv[])
 {
   QApplication app(argc, argv);
   Q_INIT_RESOURCE(perso);
	View view;
	view.show();
    return app.exec();
 }
Comme le repaint ne se faisait pas comme il faut, j'ai remplacé le "drawPixmap" par un "drawEllipse", et là on voit que ça marche parfaitement. J'ai donc supposé que le problème venait du fait que le repaint des images ne se faisait pas à cause de la lourdeur de l'affichage de l'image.
Je me suis donc orienté vers le CacheMode ("setCacheMode" au début du code) pour améliorer la vitesse du repaint. Cependant, quand j'active le cache, il ne me dessine plus qu'une seule image.

Sauriez vous donc comment correctement utiliser la propriété CacheMode des QGraphicsItems ?Ou bien comment parvenir à afficher convenablement toutes mes images.

Merci beaucoup, et désolé pour la longueur du post

G.