QGraphicsItem::toGraphicsObject() devuelve 0 en su propia clase derivada de QGraphicsPixmapItem

StackOverflow https://stackoverflow.com//questions/11650068

  •  11-12-2019
  •  | 
  •  

Pregunta

En este momento estoy intentando obtener elementos de mi propio QGraphicsView, lo que se deriva de: QObject y: QGraphicsPixmapItem.Así que agregué 2 elementos a mi escena y ahora quiero que estos elementos los saquen con otro método con un QList <QGraphicsItem*> pero lamentablemente no funciona bien y QGraphicsItem::toGraphicsObject() devuelve 0.

Entonces encontré esta descripción en Qt-Reference-Documentation:

QGraphicsObject * QGraphicsItem::toGraphicsObject ()

Return the graphics item cast to a QGraphicsObject, if the class is actually a
graphics object, 0 otherwise.

Porque quiero animar el elemento que quiero sacar de mi itemList y quiero setTargetObject para myAnimation.Pero este método necesita un QGraphicsObject Por eso necesito convertirlo a.Espero que mi código fuente diga un poco más:

--Ah--

class A : public QObject, public QGraphicsPixmapItem
{
    Q_OBJECT
    Q_PROPERTY (QPointF pos READ pos WRITE setPos)

public:
    A()
    {
        setTransformationMode (Qt::SmoothTransformation);
    }

    QPointF itemPos;
};

-- A.cpp--

void A::method()
{
    QList <QGraphicsItem*> itemList = myGraphicsView -> items();

    QGraphicsObject *test = itemList.at (0) -> toGraphicsObject();

    qDebug() << test; // <-- QGraphicsObject(0)

    myAnimation -> setTargetObject (test);
    myAnimation -> setPropertyName ("pos");
    myAnimation -> setStartValue (QPointF (0, 100));
    myAnimation -> setEndValue (QPointF (60, 100));

    myAnimation -> start();
}
¿Fue útil?

Solución

En primer lugar, un QGraphicsObject es una clase específica en sí misma.No puedes crear una nueva clase desde QObject y cualquiera de los QGraphicsItems y usarlo como QGraphicsObject.Los dos ni siquiera están en la misma jerarquía de clases.Entonces no puedes transmitir uno al otro.

En segundo lugar, setTargetObject toma un QObject, no QGraphicsObject.Entonces puedes obtener tu objeto, que es un QObject, Por aquí:

A *test = dynamic_cast<A*>(itemList.at(0));

setTargetObject lo aceptaré felizmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top