Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

QGraphicsView::centerOn : comment cela marche-t-il ?

Bonsoir !

Encore un problème de centrage avec les QGraphicsView.
On peut lire
La doc" said:
void QGraphicsView::centerOn ( const QGraphicsItem * item )
This is an overloaded function.

Scrolls the contents of the viewport to ensure that item is centered in the view.
Or j'ai 5 items, 5 carrés de 30x30 pixels alignés horizontalement, je lance CenterOn sur la fonction GameBoard::middleItem()
        m_view->centerOn(m_gameBoard->middleItem());
qui me renvoie un pointeur sur l'item n°3, et cela me donne

image

Comme vous le voyez, le 3è dé n'est centré ni verticalement, ni horizontalement...

Où est le hic ?

Merci !!

Réponses

  • Un caïd en QGraphicsView aurait-il une idée ? ;)
  • Bonjour !

    Rien de précis sur le Task Tracker à ce sujet... Je continue à chercher. Si quelqu'un utilise centerOn() avec plus de succès que moi, qu'il me fasse signe ! Merci.
  • As-tu résolu ton problème ?

    sinon, peux-tu fournir un code minimum pour tester ?

    ayant résolu mes mes soucis de migration vers Qt 4.6, je veux bien regarder
  • Merci Nicolas, je bricole un exemple minimum et je le poste.
  • En "bricolant" un exemple (en fait c'est un plus gros boulot que je le pensais ;) ) je crois avoir compris
    - que ladite fonction ne centre la vue que s'il y a des barres de défilement,
    - qu'il faut l'appeler chaque fois que la vue risque de s'être déplacée, par exemple suite à une animation qui aurait (même provisoirement) baladé des items.

    Je n'en suis pas très sûr. Quoi qu'il en soit QGraphicsView possède un certain nombre d'automatismes par défaut dont certains me gênent pour cette appli, je vais donc utiliser entre autres setSceneRect() pour fixer tout ça. ;)

    Je considère que c'est résolu, merci de votre intérêt. :)
  • sinon il y a fitInView() qui reçoit en paramètre un rectangle. La vue affiche la totalité de ce rectangle, qui pourrait avoir pour centre ce que tu veux.
Connectez-vous ou Inscrivez-vous pour répondre.