2015-09-30 4 views
0

Я подклассифицировал QGraphicsRectItem с именем ResizableRectItem. Я добавил новый член (int index) и два метода (getIndex() и setIndex()). Я добавляю ResizableRectItems к QGraphicsSceneДоступ к методам объекта подкласса QGraphicsRectItem

ResizableRectItem* item1 = new ResizableRectItem(selrect.normalized()); 
scene()->addItem(item1); 

Позже я должен вызвать метод GetIndex(), но я получить доступ только детали над деталями() сцены(), но

int idx = scene()->items().at(0)->getIndex(); 

неверен, потому что scene() -> items() является QGraphicsItem и не имеет метода getIndex(). Какое правильное решение? Спасибо!

ответ

0

Что такое правильное решение?

Если вы можете переосмыслить логику своего кода, чтобы вам не пришлось зависеть от интерфейса ResizableRectItem, это будет лучше.

Если вы не можете этого сделать, вам необходимо использовать dynamic_cast.

QGraphicsRectItem* gitem = scene()->items().at(0); 
ResizableRectItem* item = dynamic_cast<ResizableRectItem*>(gitem); 
if (item != nullptr) 
{ 
    int idx = item->getIndex(); 
} 
+0

Спасибо, он работает (если я пишу QGraphicsItem вместо QGraphicsRectItem). Я передумал свою логику, и я заметил, что у QGraphicsItem есть член с именем data (с методами getter/setter), и я могу хранить в нем произвольные данные, поэтому мне не нужно создавать собственный индекс 'member'. – jocc

0

Вы можете попробовать бросить объект на свой тип данных и на успех работать на нем. Как что:

ResizableRectItem* item = qobject_cast<ResizableRectItem*>(scene()->items().at(0)); 
if (item) 
{ 
    int idx = item->getIndex(); 
} 

Более подробная информация на http://doc.qt.io/qt-5/metaobjects.html

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