Russian Qt Forum
Сентябрь 30, 2024, 10:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узнать тип потомка от QGraphicsItem?  (Прочитано 5125 раз)
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
Записан
alexman
Гость
« Ответ #1 : Май 04, 2010, 22:08 »

Преобразовать можно StampA *stampA = qgraphicsitem_cast<StampA*>(item)
« Последнее редактирование: Май 04, 2010, 22:11 от alexman » Записан
alexman
Гость
« Ответ #2 : Май 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;
    }
    ...
 };
Записан
White Owl
Гость
« Ответ #3 : Май 04, 2010, 22:13 »

По законам задавания вопросы на форумах: "Задавание вопроса означает что через пять минут вы сами найдете ответ"
Потомки от QGraphicItem обрабатываются через qgraphicitem_cast:
http://doc.trolltech.com/4.6/qgraphicsitem.html#qgraphicsitem_cast
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.096 секунд. Запросов: 20.