я пытался создать собственный qquickitem в python как QMlelement для использования в QMlem. Qquickitem и использовал функцию updatePaintNode , чтобы сделать картину.
Код: Выделить всё
## 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
, но при использовании qsggeometrynode ничего не видно, даже если QML правильно работает или иногда все программное сообщение, я получаю (я получаю ошибку. Это может быть немного отличаться на английском языке). < /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>
Я не мог найти проблему в своем коде, и он работает без ошибок (кроме ошибки памяти иногда). Все остальные сценарии (QML, Python) я не изменился. Типы.
Большое спасибо, уже много
maleydo
Подробнее здесь: https://stackoverflow.com/questions/797 ... -visible-a