如何防止图形项目被绘制出场景?以及如何为QGraphicsView和QGraphicsScene提供不同的背景颜色

时间:2014-05-27 00:36:25

标签: python c++ qt pyqt

我想设置如下图像。

我想要QGraphicsView(例如,与窗口颜色相同)和QGraphicsScene(例如,白色)的不同背景颜色。另外,我希望如果某个项目是从场景边界中绘制出来的那部分未被渲染(img中的星形'任何项目'都会被裁剪)。

我不知道如何设置它。我是Qt的新人。

PS:我正在使用python,但如果您觉得舒适,可以用c ++进行示例。

enter image description here


回答杰里米弗里斯纳

这是我的代码应用您的提示:

    scene = QtGui.QGraphicsScene(0, 0, 256, 256)
    scene.setBackgroundBrush(QtGui.QBrush(scene.palette().color(QtGui.QPalette.Window)))
    scene.addRect(scene.sceneRect(), QtGui.QPen(QtCore.Qt.NoPen), QtGui.QBrush(QtCore.Qt.white))
    scene.addLine(0, 0, 356, 356)

    view = QtGui.QGraphicsView(scene)

    self.setCentralWidget(view) # we are in a QMainWindow

正如您所看到的,我使用场景边界和比场景边界稍大的线添加白色QRect。这是我的应用程序的截图结果(该行也被绘制出场景):

enter image description here

如果应用程序大小小于场景边界(即View <= Scene),则不会渲染场景中的部分(bc滚动条不允许),但如果应用程序更大(即{ {1}}),然后绘制。怎么解决?

1 个答案:

答案 0 :(得分:0)

  

我想要QGraphicsView的不同背景颜色(比如说,相同)   窗口颜色)和QGraphicsScene(比方说,白色)。

QGraphicsScene对象永远不会直接显示在屏幕上 - 也就是说,它不是QWidget的子类,因此无法将其添加到窗口的窗口小部件层次结构中。查看QGraphicsScene内容的唯一方法是将QGraphicsViewQGraphicsScene相关联,并将QGraphicsView添加到窗口小部件层次结构中。

鉴于此,问题的解决方案应该是简单地在setBackgroundBrush(window->palette().color(QPalette::Window))对象上调用QGraphicsSceneQGraphicsView会自动反映QGraphicsScene的背景颜色。

如果您希望QGraphicsScene的实际内容区域是不同的颜色(例如,在您缩小后,有一个窗口背景色的边框围绕不同的背景颜色场景区域,如屏幕截图所示),您可以通过向场景添加适当颜色和大小的QGraphicsRect项(由QGraphicsScene::sceneRect()给出)来获得该效果。 (务必使用负值调用setZValue(),以使其保留在场景中的所有其他对象后面!)

  

另外,我希望如果某个项目是从场景边界绘制出来的   部分未渲染(img中的星形'任何项目',腿被裁剪)。

AFAIK这是QGraphicsView的通常行为 - QGraphicsScene::sceneRect()定义的区域之外的任何内容都会自动剪切到该区域。您是否看到与此不同的行为?