0

我正在使用 PyQt4 开发节点编辑器,并整理了 QGraphicsView 和 QGraphicsItem 的基础知识,但在透明度方面遇到了问题。

我的代码在下面,它看起来与我找到的示例相似,但是当我移动节点时,根据链接的图像留下了痕迹。

我是否错过了一些需要设置的标志或某处的某种更新调用?

链接到输出示例

def paint(self, painter, option, widget=None):

    painter.setPen(Node.shadow_color)
    painter.setBrush(Node.shadow_color)
    painter.setOpacity(0.3)
    shadow_rect = self.rect()
    shadow_rect.translate(Node.shadow_offset, Node.shadow_offset)
    painter.drawRoundedRect(shadow_rect, Node.corner_radius, Node.corner_radius)

    if self.check_state(Node.SELECTED):
        painter.setPen(Node.outline_selected_colour)
        painter.setBrush(Node.background_selected_colour)
    else:
        painter.setPen(Node.outline_colour)
        painter.setBrush(Node.background_colour)

    if self.check_state(Node.HOVER):
        painter.setPen(Node.outline_hover_colour)
        painter.setBrush(Node.background_hover_colour)

    painter.setOpacity(1.0)
    painter.drawRoundedRect(self.rect(), Node.corner_radius, Node.corner_radius)
4

1 回答 1

0

发生的事情是 QGraphicsView 仅更新由节点的 QRect 区域定义的边界区域。

当您从前一个位置拖动节点时,您的阴影实际上是在项目的边界矩形(由 QGraphicsRectItem.rect() 定义)之外绘制的,因此视图不会重绘该空间 - 这就是您看到的原因小径。

您可以尝试将 QGraphicsView.viewportUpdateMode 设置为 FullViewportUpdate 之类的东西,看看它是否可以解决您的问题(但它会带来性能损失),但我建议您将节点的矩形视为边界绘图区域 - 并偏移实际大小您的节点及其阴影在该空间内绘制与在该空间外绘制边框和阴影。

如果您想查看(或使用)它作为 PyQt 扩展的开源 ProjexUI 库的一部分,我有一个节点小部件。它位于:

http://dev.projexsoftware.com/projects/projexui

该类是 projexui.widgets.xnodewidget,我将它用于许多不同的事情,但 Orbiter 应用程序使用它。

于 2012-08-02T04:49:59.727 回答