我想设置如下图所示。
我想要QGraphicsView
(比如窗口颜色)和QGraphicsScene
(比如白色)的不同背景颜色。另外,我希望如果某个项目是从场景边界中绘制出来的那部分未被渲染(img中的星形'任何项目'都会被裁剪)。
我不知道如何设置它。我是Qt的新手。
PS:我正在使用python,但如果你觉得舒服,可以用c ++进行扩展。
回答杰里米弗里斯纳
这是我的代码应用您的提示:
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。这是我的应用程序的截图结果(该行也被绘制出场景):
如果应用程序大小小于场景边界(即View <= Scene
),则不会渲染场景中的部分(bc滚动条不允许),但如果应用程序更大(即View > Scene
),则绘制它。怎么解决?
我想要
QGraphicsView
(比如窗口颜色)和QGraphicsScene
(比如白色)的不同背景颜色。
QGraphicsScene
对象永远不会直接显示在屏幕上 - 也就是说,它不是QWidget
的子类,因此无法将其添加到窗口的窗口小部件层次结构中。查看QGraphicsScene
内容的唯一方法是将QGraphicsView
与QGraphicsScene
相关联,并将QGraphicsView
添加到窗口小部件层次结构中。
鉴于此,您的问题的解决方案应该是简单地在setBackgroundBrush(window->palette().color(QPalette::Window))
对象上调用QGraphicsScene
。 QGraphicsView
将自动反映QGraphicsScene
的背景颜色。
如果你想要QGraphicsScene
的实际内容区域是不同的颜色(例如,在你缩小之后,在场景区域中有一个不同背景颜色的窗口背景色边框,如图所示在你的截图中,你可以通过添加一个适当颜色和大小的QGraphicsRect
项目(由QGraphicsScene::sceneRect()
给出)到你的场景来获得这种效果。 (务必使用负值调用setZValue()
,使其保留在场景中的所有其他对象后面!)
另外,我希望如果某个项目是从场景边界中绘制出来的那部分未被渲染(img中的星形'任何项目'都会被裁剪)。
AFAIK这是QGraphicsView
的通常行为 - 任何超出QGraphicsScene::sceneRect()
定义的区域的内容都会自动剪切到该区域。您是否看到与此不同的行为?