Russian Qt Forum

Qt => Общие вопросы => Тема начата: dware от Июнь 10, 2010, 17:24



Название: Downcasting
Отправлено: dware от Июнь 10, 2010, 17:24
Снова здравствуйте!)
Имеется класс ObjectItem:
Код:
class ObjectItem : public Item
в свою очередь
Код:
class Item : public QGraphicsItem
Получив первый выделенный объект со сцены:
Код:
scene->selectedItems().first()
хочу привести его к типу ObjectItem (добавлялся он на сцену именно как ObjectItem). Но
Код:
qgraphicsitem_cast<ObjectItem *> (scene->selectedItems().first()) 
использовать не могу(
как будет правильно?


Название: Re: Downcasting
Отправлено: BRE от Июнь 10, 2010, 17:34
использовать не могу(
как будет правильно?
Так а как пытаешься использовать?

Код
C++ (Qt)
ObjectItem *item = qgraphicsitem_cast<ObjectItem *>( scene->selectedItems().first() );
if( item )
   item->use();
 


Название: Re: Downcasting
Отправлено: dware от Июнь 10, 2010, 17:38
дело в том, что
qgraphicsitem_cast<ObjectItem *> (scene->selectedItems().first()) возвращает 0.


Название: Re: Downcasting
Отправлено: BRE от Июнь 10, 2010, 17:39
дело в том, что
qgraphicsitem_cast<ObjectItem *> (scene->selectedItems().first()) возвращает 0.

А что возвращает:
scene->selectedItems().size()


Название: Re: Downcasting
Отправлено: dware от Июнь 10, 2010, 17:44
единицу.


Название: Re: Downcasting
Отправлено: Kolobok от Июнь 10, 2010, 17:46
Цитировать
T qgraphicsitem_cast ( QGraphicsItem * item )
Возвращает заданный item преобразованный к типу T если item является типом T; в противном случае возвращается 0.

Примечание: Чтобы заставить эту функцию работать корректно с собственными элементами, переопределите функцию type() для каждого собственного подкласса QGraphicsItem.


Название: Re: Downcasting
Отправлено: BRE от Июнь 10, 2010, 17:47
Цитировать
T qgraphicsitem_cast ( QGraphicsItem * item )
Returns the given item cast to type T if item is of type T; otherwise, 0 is returned.

Note: To make this function work correctly with custom items, reimplement the type() function for each custom QGraphicsItem subclass.
То что написано в Note сделано?


Название: Re: Downcasting
Отправлено: dware от Июнь 10, 2010, 17:55
эх... Type определил, а type() забыл :-[ спасибо!
а что за функция use(), кстати ?


Название: Re: Downcasting
Отправлено: BRE от Июнь 10, 2010, 17:56
а что за функция use(), кстати ?
Использовать.  :)


Название: Re: Downcasting
Отправлено: dware от Июнь 10, 2010, 17:59
а, шутка)