PySide:QGraphicsView中可调整大小的场景

时间:2013-02-27 02:39:54

标签: resize pyside qgraphicsview qgraphicsscene

我试图找到一种方法标记QGraphicsScene的边框,并使其在QGraphicsView内可调整大小,以创建类似于Microsoft Paint的内容。


换句话说,我当前的QGraphicsView看起来像这样:

Current QGraphicsView

但我的形象只有这么大,如红色框所示:

Image size indicated by red box.  The background doesn't count as part of the image.

我希望我的QGraphicsView像这样(小黑框是用于调整画布大小的角色):

Final resizable QGraphicsView


从功能上讲,我希望它类似于MS Paint MS Paint example

画布(场景)可调整大小,窗口(视图)上的滚动条会在需要时显示。蓝色背景颜色(纯灰色背景)出现在画布后面。

我将如何完成这项工作?


为了尝试获得灰色背景,我一直在试验QGraphicsView.setBackgroundBrush()QGraphicsScene.setBackgroundBrush()。我已经了解到QGraphicsView的背景画笔完全覆盖QGraphicsScene的背景画笔(如果已设置)。即使我只为QGraphicsScene设置背景画笔,该背景画笔也会延伸到图像的原始边界上。


这是 a link to my test code 。 感谢帮助!

1 个答案:

答案 0 :(得分:0)

我必须与你的构造函数斗争... dunno如果它适用于Windows,但必须使它与Linux一起工作。试试:

def setPixmap(self, pixmap):
    if self.pixmap_item:
        self.removeItem(self.pixmap_item)

    self.pixmap_item = self.addPixmap(pixmap)

    self.setPixBackGround()

def setPixBackGround(self):
    # put Background rect for image
    pixR = self.pixmap_item.pixmap().rect()
    bgRectangle = self.addRect(pixR.x()-10, pixR.y()-10, 
                    pixR.width()+20, pixR.height()+20)
    # set color and Z value to put it behind image
    bgColor = QColor(58, 176, 176)
    bgRectangle.setBrush(bgColor)
    bgRectangle.setZValue(-.1)
    # take coordinates for brabbers
    bgR = bgRectangle.rect()
    grab1R = QRect(-5,-5,10,10)
    # put grabbers as wish...
    grab1 = self.addRect(grab1R)
    grab1.setPos(bgR.topLeft())

    grab2 = self.addRect(grab1R)
    grab2.setPos(bgR.topRight())
    # ....etc....