0

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


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

当前的 QGraphicsView

但是我的图像只有这么大,如红框所示:

红色框表示的图像大小。 背景不算作图像的一部分。

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

最终可调整大小的 QGraphicsView


在功能上,我希望它类似于 MS PaintMS 油漆示例

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

我将如何实现这一目标?


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


这是我的测试代码的链接。帮助表示赞赏!

4

1 回答 1

0

我必须与您的构造函数斗争......不知道它是否适用于 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....
于 2013-03-07T12:56:28.733 回答