QGraphicsItem::toGraphicsObject() devuelve 0 en su propia clase derivada de QGraphicsPixmapItem
-
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();
}
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.