IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

[QGraphics Cache]Afficher de nombreux pixmaps dans une scène


Sujet :

Qt

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut [QGraphics Cache]Afficher de nombreux pixmaps dans une scène
    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.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    J'ai vu qu'il y'avait une classe QGraphicsPixmapItem. Je l'ai utilisé, ça marche parfaitement. J'irai voir le code source pour voir comment ça marche.

    Désolé pour le post inutile.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-97] Afficher résultat de requête dans une zone de texte
    Par paflolo dans le forum IHM
    Réponses: 21
    Dernier message: 28/04/2022, 12h57
  2. Comment afficher la ligne "opération" dans une req
    Par Aurèl90 dans le forum Access
    Réponses: 3
    Dernier message: 03/04/2017, 17h17
  3. Comment afficher un Set(COLLECTION) DANS UNE jTABLE
    Par taf dans le forum Composants
    Réponses: 3
    Dernier message: 05/04/2006, 11h53
  4. [TomCat] afficher la trace TomCat dans une page perso
    Par danyboy85 dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 02/03/2006, 11h30
  5. afficher de l'opengl dans une fenetre web
    Par soubre dans le forum OpenGL
    Réponses: 7
    Dernier message: 16/09/2005, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo