2010-08-18 4 views
5

J'essaie d'afficher une image dans sa vue complète en utilisant QGraphicsScene. Mais quand je mets le QgraphicsScene à l'intérieur de QGraphicsView, j'obtiens une barre de défilement. J'ai essayé tant de façons Mais tout est allé aux veines. Alors quelqu'un peut-il me dire comment obtenir la vue complète sans la barre de défilement.Qt - QGraphicsView sans ScrollBar

Répondre

5
QGraphicsView v; 
v.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
v.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 

Pour régler le défilement par programmation une fois que ceux-ci ont été cachés, utilisez l'une des surcharges de v.ensureVisible().

8

Vous obtiendrez peut-être des barres de défilement car la scène est plus grande que la zone utilisable dans la vue graphique. Par défaut, un QGraphicsView est livré avec une marge de 1 pixel. Pour résoudre ce problème, vous pouvez essayer:

QRect rcontent = graphicsView.contentsRect(); 
graphicsView.setSceneRect(0, 0, rcontent.width(), rcontent.height()); 

j'avais été faire scrollbars parce que je mettais manuellement la rect scène à la taille de l'élément graphique que j'ajoutais - qui était aussi grand que le widget QGraphicsView. Je ne tenais pas compte de la marge.

+0

Y at-il un moyen de désactiver simplement la marge de 1 pixel? Votre code corrige le problème pour moi, mais il ressemble toujours à une correction évidente d'un défaut par défaut. – Trilarion

+1

Nope; cette marge est codée en dur dans 'fitInView' (voir QTBUG-11945). La seule façon de s'en débarrasser est d'écrire votre propre 'fitInView'. Il y a eu quelques discussions pour exposer la marge via une API mais cela n'a pas encore été fait dans aucune version de Qt. – AndrewS