0

現時点では、:QObject と :QGraphicsPixmapItem によって派生したものを自分の QGraphicsView から取得しようとしています。そのため、シーンに 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。この 2 つは同じクラス階層にさえありません。したがって、一方を他方にキャストすることはできません。

次に、ではなくsetTargetObjectを取ります。したがって、次の方法でオブジェクトを取得できます。QObjectQGraphicsObjectQObject

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

setTargetObject喜んで受け取ります。

于 2012-07-25T13:47:31.037 に答える