2009-10-19 10 views
0

Très application simple GUI Qt:QGraphicsItem redessiner problème déselectionner

  • Sur la scène j'ai plusieurs cercles comme mis en œuvre QGraphicsItem
  • boundingRect retourne carré autour ce cercle.
  • La 'forme' de la méthode n'est pas remplacée.

Le problème apparaît lorsque la méthode de peinture() J'ai ajouté:

if (isSelected()) { 
    painter->drawRect(re); 
} 

La sélection est bien dessiné, mais désélection ne provoque pas de redessiner. Au niveau du journal, je peux voir que l'élément a vraiment perdu le drapeau de sélection. Appeler update() depuis itemChange est également inutile. Merci d'avance pour toute suggestion.

Répondre

0

Après 10 jours, je suis revenu à ce problème et a découvert que mon QGraphicsItem construit avec setCacheMode(DeviceCoordinateCache); OMG! Erreur stupide, quand cette ligne a été supprimée (par défaut QGraphicsItem :: NoCache utilisé) la sélection est bien redessinée.

+0

pouvez-vous m'expliquer pourquoi ce drapeau setCacheMode est en train de créer le problème .. maintenant je suis confronté au même problème. si je mets le QGraphicsProxyWidget avec ce drapeau, il n'affiche pas l'étiquette correctement jusqu'à ce que je mette la fenêtre à opengl. – Wagmare

+1

@Wagmare c'est plutôt simple - parce que la bordure autour de l'élément n'apparaît pas dans le cache. Le niveau de cache de DeviceCoordinateCache est trop bon, c'est pourquoi les changements de bordure n'y sont pas visibles. – Dewfy

+0

thx pour beaucoup de réponse utile .. alors comment puis-je utiliser le cache sur QGraphicsProxyWidget que j'ai besoin d'ajouter plus de mille éléments son nécessaire pour utiliser le cache. – Wagmare

0

Vous pouvez également essayer de changer la valeur par défaut de QGraphicsView :: MinimalViewportUpdate en FullViewportUpdate avec setViewportUpdateMode (QGraphicsView :: FullViewportUpdate);

Ou vous pouvez appeler scene() -> update(); de l'article pour planifier une repeindre. L'un d'eux était requis au moins lorsque je continuais à changer l'indicateur QGraphicsItem :: ItemHasNoContents sur un élément.

Questions connexes