2012-02-05 5 views
0

に拡張QGraphicsItemを追加し、私はこのようにQtのクラスQGraphicsItemを拡張するクラスAtom作成しました:その後Qtはシーン

Atom::Atom(qreal rad, qreal mass, int element, int state) : QGraphicsItem() 
{ 
    // Initialization code 
} 
void Atom::changeState(int newState) 
{ 
    // Code... 
} 

を、私はこのような場面に私のアトムを追加します。

Atom *a=new Atom(rad,mass,element,state); 
a->setPos(pos); 
scene->addItem(a); 

しかし、Qtは私のAtomクラスをQGraphicsItemクラスに変換します。さて、私はscene->items()を呼び出すと、QGraphicsItemsのQListを取得します。QListは、Atomクラスのプロパティとメソッドを持っていません。

QGraphicsSceneに追加したAtomsのリストを取得するにはどうすればよいですか?

ありがとうございました。

答えて

1

号あなたのアイテムは何に変換されません。彼らはあなたのカスタムタイプのままです。 C++では、派生クラスのすべてのオブジェクトも、それらが派生するクラスになります。何も変換されないので、何も失われません。

dynamic_cast<Atom*>(item)を実行すると、アイテムが返されます。

+0

ありがとうございました。 'dynamic_cast (item)' vs '((Atom *)item)'の違いは何ですか? – Joel

+0

@Joel:http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast – Mat

+0

ありがとうございました。私は今理解していると思う。 – Joel

関連する問題