2012-02-05 125 views
0

我創建了一個類Atom擴展了Qt類QGraphicsItem這樣的:Qt的添加擴展的QGraphicsItem場景

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,它沒有我的Atom類的屬性和方法。

所以,我問的問題:我將如何去獲得我添加到我的QGraphicsScene的原子列表?

謝謝。

回答

1

。您的項目未轉換到任何東西。他們仍然是你的自定義類型。在C++中,派生類的所有對象也都是它們派生的類。沒有任何東西被轉換,所以沒有任何東西丟

做一個dynamic_cast<Atom*>(item),你會得到你的物品。

+0

謝謝。 'dynamic_cast (item)'vs'((Atom *)item)有什麼區別? – Joel 2012-02-05 20:30:45

+0

@Joel:http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast – Mat 2012-02-05 20:36:01

+0

謝謝。我想我現在明白了。 – Joel 2012-02-05 20:42:23