0

目前我试图从我自己的 QGraphicsView 中获取项目:QObject 和 :QGraphicsPixmapItem 派生的项目。所以我在我的场景中添加了 2 个项目,现在我希望这些项目用另一种方法将它们取出,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;
};

-- 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();
}
4

1 回答 1

2

首先,aQGraphicsObject本身就是一个特定的类。您不能从其中创建新类QObject并将QGraphicsItems其用作QGraphicsObject. 两者甚至不在同一个类层次结构中。所以你不能把一个投给另一个。

其次,setTargetObject需要一个QObject,不是QGraphicsObject。因此,您可以通过以下方式获取对象 a QObject

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

setTargetObject会很高兴地接受它。

于 2012-07-25T13:47:31.037 回答