目前,我正在尝试从我自己的QGraphicsView中获取项目,查看由:QObject和:QGraphicsPixmapItem派生的内容。所以我在我的场景中添加了两个条目,现在我希望这些条目在另一个方法中使用QList <QGraphicsItem*>将它们取出,但不幸的是,它不能很好地工作,QGraphicsItem::toGraphicsObject()返回0。
所以我在Qt参考文档中找到了这个描述:

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,所以我需要把它转换成。希望我的源代码能告诉你更多:
--A.h.公司--
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();
}

最佳答案

首先,aQGraphicsObject本身就是一个特定的类。不能从QObject和任何QGraphicsItems创建新类并将其用作QGraphicsObject。两者甚至不在同一个类层次结构上。所以你不能把一个投给另一个。
其次,setTargetObject需要一个QObject,而不是QGraphicsObject。所以你可以这样得到你的对象,它是一个QObject

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

很乐意接受。

10-07 17:53