【问题标题】:PySide: Resizable scene in QGraphicsViewPySide:QGraphicsView 中可调整大小的场景
【发布时间】:2013-02-27 02:39:54
【问题描述】:

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


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

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

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


在功能上,我希望它类似于 MS Paint

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

我将如何实现这一目标?


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


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

【问题讨论】:

  • 你使用 setSceneRect 吗?
  • @Alex 我试过了,但这不是我想要的。 QGraphicsView.setSceneRect() 限制了场景的可滚动区域,但我希望能够缩小以查看整个场景,并且在场景边界上具有灰色背景。 QGraphicsScene.setSceneRect() 似乎没有任何影响。
  • SceneRect 应用于场景确实将您的坐标系定位在视图内,但您可以拖动超出其尺寸。使用 scale() 在视图中,您可以轻松缩放。您是否尝试将 rect 项目放在后面并将其用作框架?抱歉,如果我不明白您的问题...如果您发布示例代码,可能会更容易复制 - 尝试解决问题。
  • @Alex 我不确定我是否解释得足够清楚。我已经用测试代码和更详细的解释更新了我的原始帖子。请看一看!

标签: resize pyside qgraphicsview qgraphicsscene


【解决方案1】:

我不得不与你的构造函数斗争......不知道它是否适用于 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....

【讨论】:

  • 这就是您使用 rect 项目的意思。我不知道你能做到这一点,谢谢!
  • 现在我们互相了解了。使用该 rectItem 作为所有图像操作的参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2018-07-05
  • 2015-01-12
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多