Pyside6-qtquick qsggeometrynode in QquickItem.UpdatePaintNode nicht sichtbar und verursacht manchmal zum Absturz

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Pyside6-qtquick qsggeometrynode in QquickItem.UpdatePaintNode nicht sichtbar und verursacht manchmal zum Absturz

by Anonymous » 20 Aug 2025, 01:19

Ich schreibe eine Anwendung in python3.12 auf Ubuntu mit pyside6.9 und qml . Subklassifter QquickItem und verwendet die Funktion updatePaintNode , um das Gemälde zu erledigen.

Code: Select all

## working example

# imports

QML_IMPORT_NAME = "Instance2D"
QML_IMPORT_MAJOR_VERSION = 1

@QmlElement
class Instance2D(QQuickItem):

itemChanged = Signal(QObject, name="itemChanged")

def __init__(self, parent=None):
super().__init__(parent)

self.setFlag(QQuickItem.Flag.ItemHasContents, True) # to enable calls of updatePaintNode

def updatePaintNode(self, node: QSGNode, upd):
if node is None:
node = QSGSimpleRectNode()
node.setColor(Qt.GlobalColor.green)

node.setRect(QRectF(25, 25, 200, 500))

return node
Es hat mit dem QSGSimPlerectnode als zurückgegebener Knoten aus der Funktion hervorragend funktioniert. es könnte in englischer Sprache etwas anders sein). < /p>
## Not working example

...
def updatePaintNode(self, node: QSGNode, upd):
if node is None:
geometry = QSGGeometry(QSGGeometry.defaultAttributes_Point2D(), 3)
geometry.setDrawingMode(QSGGeometry.DrawingMode.DrawTriangles)
geometry.allocate(3) # Don't know if this is needed

material = QSGFlatColorMaterial()
material.setColor(QColor(100, 255, 0))

node = QSGGeometryNode()
node.setGeometry(geometry)
node.setMaterial(material)
node.setFlag(QSGNode.Flag.OwnsGeometry, True)
node.setFlag(QSGNode.Flag.OwnsMaterial, True)

vertices = geometry.vertexDataAsPoint2D()

vertices[0].set(50, 50)
vertices[1].set(100, 50)
vertices[2].set(75, 120)

# node.markDirty(QSGGeometryNode.DirtyStateBit.DirtyGeometry) # Did not help

return node
< /code>
Ich konnte kein Problem in meinem Code finden und es wird ohne Fehler ausgeführt (außer dem Speicherfehler manchmal). Alle anderen Skripte (QML, Python) habe ich nicht geändert. Typen.>

Top