python - 如何防止图形项目被绘制出来?以及如何为QGraphicsView和QGraphicsScene具有不同的背景色

标签 python c++ qt pyqt

我想像图像波纹管一样设置。

我希望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),则将其绘制。怎么解决呢?

最佳答案

I want different backgrounds color for QGraphicsView (say, same as window color) and QGraphicsScene (say, white).


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

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

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

Also, I want that if some item is drawn out of the scene bounds that part is not rendered (the star 'any item' in img with legs cropped).



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

关于python - 如何防止图形项目被绘制出来?以及如何为QGraphicsView和QGraphicsScene具有不同的背景色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23879433/

相关文章:

python - 值错误 : No axis named 1 for object type <class 'pandas.core.series.Series' >

python supervisord 程序依赖

c++ - 如何修剪存储在 std::set 中的字符串?

c++ - 比较是原子操作吗?

c++ - 使用 QPainterPath 创建一个凹矩形

qt - 如何双向通信 Qt 应用程序

python - 将 df1 列 1 与 df2 中的所有列进行比较,返回 df2 的索引

python igraph,基于顶点名称/标签的图交集/并集

c++ - UDP winsock 服务器 C++

linux - 嵌入式 Linux 上的 Qt 应用程序自动运行 - "xcb"错误