[Kde-games-devel] QGraphicsView and fitInView
Wolfgang Rohdewald
wolfgang at rohdewald.de
Fri Feb 20 21:51:55 CET 2009
On Freitag, 20. Februar 2009, Pierre Maurier wrote:
> But when I try that :
> self.gameView.fitInView(self.gameScene.itemsBoundingRect(),
> Qt.KeepAspectRatio)
>
> I get something far from what I expected (The QGraphicsItem is very small and
> have a lot of blank space around).
>
where do you do that? I think it should be in resizeEvent.
This works for me:
class FittingView(QGraphicsView):
"""a graphics view that always makes sure the whole scene is visible"""
def __init__(self, parent=None):
"""generate a fitting view with our favorite properties"""
QGraphicsView.__init__(self, parent)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
vpol = QSizePolicy()
vpol.setHorizontalPolicy(QSizePolicy.Expanding)
vpol.setVerticalPolicy(QSizePolicy.Expanding)
self.setSizePolicy(vpol)
self.setRenderHint(QPainter.Antialiasing)
self.setRenderHint(QPainter.SmoothPixmapTransform)
self.__background = None
self.setStyleSheet('background: transparent')
self.setFrameShadow(QFrame.Plain)
def resizeEvent(self, event):
"""scale the scene for new view size"""
QGraphicsView.resizeEvent(self, event)
if self.scene():
self.fitInView(self.scene().itemsBoundingRect(), Qt.KeepAspectRatio)
def mousePressEvent(self, event):
"""for debugging"""
print 'mousepos:', self.mapToScene(event.pos())
QGraphicsView.mousePressEvent(self, event)
--
Wolfgang
More information about the kde-games-devel
mailing list