Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: White Owl от Май 04, 2010, 22:03



Название: Как узнать тип потомка от QGraphicsItem?
Отправлено: White Owl от Май 04, 2010, 22:03
У меня на сцене (QGraphicScene) есть несколько типов объектов, все потомки от QGraphicsItem.
Пытаюсь перебрать эти объекты:
Код:
foreach(const QGraphicsItem *item, this->scene()->items() ) {
   if( StampA *stampA = qobject_cast<StampA*>(item)) {
        .... etc
Получаю ошибку: "no matching function for call to 'qobject_cast(const QGraphicsItem*&)'"
Немножко полазив по исходникам вижу что QGraphicsItem действительно не является потомком от QObject и поэтому не попадает под действие всей системе мета-объектов и qobject_cast в частности...
Спрашивается, как быть?

Qt 4.6.2


Название: Re: Как узнать тип потомка от QGraphicsItem?
Отправлено: alexman от Май 04, 2010, 22:08
Преобразовать можно StampA *stampA = qgraphicsitem_cast<StampA*>(item)


Название: Re: Как узнать тип потомка от QGraphicsItem?
Отправлено: alexman от Май 04, 2010, 22:11
А для распознавания можно переопределить метод int QGraphicsItem::type () const   [virtual].
Вот примерчик
Код:
 class CustomItem : public QGraphicsItem
 {
    ...
    enum { Type = UserType + 1 };

    int type() const
    {
        // Enable the use of qgraphicsitem_cast with this item.
        return Type;
    }
    ...
 };


Название: Re: Как узнать тип потомка от QGraphicsItem?
Отправлено: White Owl от Май 04, 2010, 22:13
По законам задавания вопросы на форумах: "Задавание вопроса означает что через пять минут вы сами найдете ответ"
Потомки от QGraphicItem обрабатываются через qgraphicitem_cast:
http://doc.trolltech.com/4.6/qgraphicsitem.html#qgraphicsitem_cast