Qt добавляет расширенный QGraphicsItem к сцене - PullRequest
0 голосов
/ 06 февраля 2012

Я создал класс Atom, который расширяет класс 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?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Вам нужно будет привести QGraphicsItems к Атомам.Пожалуйста, смотрите этот вопрос для деталей:

Подкласс QGraphicsItem не позволяет мне использовать itemAt () в QGraphicsScene / View

1 голос
/ 06 февраля 2012

Нет. Ваши предметы не конвертированы ни во что. Они все еще вашего типа. В C ++ все объекты производного класса также принадлежат к классу, из которого они происходят. Ничто не конвертируется, поэтому ничего не теряется.

Сделайте dynamic_cast<Atom*>(item) и вы получите свой предмет обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...