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 に答える