如何防止图形项目被画出场景?以及如何为 QGraphicsView 和 QGraphicsScene 设置不同的背景颜色

Posted

技术标签:

【中文标题】如何防止图形项目被画出场景?以及如何为 QGraphicsView 和 QGraphicsScene 设置不同的背景颜色【英文标题】:How can I prevent a graphic item from to be draw out the scene? and how to have different background colors for QGraphicsView and QGraphicsScene 【发布时间】:2014-07-15 18:38:36 【问题描述】:

我想像下图那样设置。

我想要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),则不渲染场景之外的部分(不允许滚动条),但如果应用程序更大(即View > Scene ),然后绘制。如何解决?

【问题讨论】:

你找到答案了吗,或者下面的答案已经解决了? 【参考方案1】:

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

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

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

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

另外,我希望如果某些项目被拉出场景边界 部分未渲染(img 中的星号“任何项目”,腿被裁剪)。

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

【讨论】:

以上是关于如何防止图形项目被画出场景?以及如何为 QGraphicsView 和 QGraphicsScene 设置不同的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

spring/hibernate 如何为我们提供防止 SQL 注入的保证以及它是如何在内部处理的?

如何在Cocos2D v3.x中正确推送和弹出场景

Android - 如何为 GCM 实施规范 ID 以防止重复

Plotly:如何为使用多条轨迹创建的图形设置调色板?

实战开发细节:如何为单片机的按键加一个锁防止多次触发

Plotly:如何为标准偏差制作具有多条线和阴影区域的图形?