QGraphicsItem::toGraphicsObject() تُرجع 0 في الفئة الخاصة المشتقة بواسطة QGraphicsPixmapItem
-
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
سوف أعتبر بسعادة.