2012-02-05 3 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(), я получаю QList QGraphicsItems, которые не имеют свойств и методов моего класса Atom.

Итак, я задаю вопрос: как мне получить список атомов, которые я добавил в свою QGraphicsScene?

Спасибо.

ответ

1

No. Ваши детали не конвертируются ни к чему. Они по-прежнему нестандартного типа. В 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

Смежные вопросы