QGraphicsItem::toGraphicsObject() تُرجع 0 في الفئة الخاصة المشتقة بواسطة QGraphicsPixmapItem

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

  •  11-12-2019
  •  | 
  •  

سؤال

في الوقت الحالي أحاول الحصول على عناصر من QGraphicsView الخاص بي والذي تم اشتقاقه بواسطة :QObject و :QGraphicsPixmapItem.لذلك أضفت عنصرين إلى المشهد الخاص بي وأريد الآن أن تقوم هذه العناصر بإخراجهما بطريقة أخرى باستخدام ملف QList <QGraphicsItem*> ولكن للأسف أنه لا يعمل بشكل جيد و QGraphicsItem::toGraphicsObject() يعود 0.

لذلك وجدت هذا الوصف في Qt-Reference-Documentation:

QGraphicsObject * QGraphicsItem::toGraphicsObject ()

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

لأنني أريد تحريك العنصر الذي أريد الخروج منه itemList وتريد setTargetObject ل myAnimation.لكن هذه الطريقة تحتاج إلى QGraphicsObject ولهذا السبب أحتاج إلى تحويله إلى.آمل أن يخبرني كود المصدر الخاص بي بالمزيد:

-- آه --

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

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

    QPointF itemPos;
};

-- أ.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();
}
هل كانت مفيدة؟

المحلول

أولا وقبل كل شيء، أ QGraphicsObject هي فئة محددة في حد ذاتها.لا يمكنك إنشاء فئة جديدة من QObject وأي من QGraphicsItems واستخدامها ك QGraphicsObject.الاثنان ليسا حتى في نفس التسلسل الهرمي للفئة.لذلك لا يمكنك إلقاء أحدهما على الآخر.

ثانيًا، setTargetObject يأخذ QObject, ، لا QGraphicsObject.حتى تتمكن من الحصول على الكائن الخاص بك، وهو QObject, ، من هنا:

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

setTargetObject سوف أعتبر بسعادة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top