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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsItem и сигналы - вещи несовместимые?  (Прочитано 9536 раз)
troorl
Гость
« : Март 09, 2007, 04:52 »

Посылаю в одном из методов потомка QGraphicsItem сигнал:
Код:
emit onSelectItem();


В заголовочном файле указываю:
Код:
signals:
    void onSelectItem();


Но при компиляции вылазит ошибка:
Код:
build/moc/moc_frameItem.cpp:40: error: staticMetaObject is not a member of QGraphicsItem


Неужели нельзя посылать сигналы из QGraphicsItem?

добавлено спустя 2 минуты:

 Да, и ещё: макрос Q_OBJECT я указать не забыл)

добавлено спустя 34 минуты:

 Методом тыка пришёл к выводу, что надо добавить в предки ещё и QObject. Не знаю, правильно ли это, но вроде работает Улыбающийся
Записан
Вячеслав
Гость
« Ответ #1 : Март 09, 2007, 17:22 »

ГЫЫЫЫЫЫЫЫЫЫЫЫЫ!!!  А Доку кто будет читать ? QGraphicsItem - не НАСЛЕДНИК QObject'a следовательно если хотится сигналов делаем двойное наследование
Код:
class Mouse : public QObject, public QGraphicsItem
{
    Q_OBJECT
и как ни странно - работает Подмигивающий
Записан
troorl
Гость
« Ответ #2 : Март 09, 2007, 17:39 »

Ну я собственно это и сделал Подмигивающий
Записан
Вячеслав
Гость
« Ответ #3 : Март 09, 2007, 17:44 »

Ну да Подмигивающий И тык тута не причем Подмигивающий Кстати - примеры рулят Подмигивающий
Записан
troorl
Гость
« Ответ #4 : Март 09, 2007, 17:57 »

А можно ещё один вопрос? Как мне при генерации сигнала передать через этот сигнал ссылку на самого себя?
То есть что-то типа такого:

emit balbla(this);

Что-то я никак не могу это победить.
Записан
Вячеслав
Гость
« Ответ #5 : Март 09, 2007, 18:33 »

Код:

public slots :
 void doSomeThing(QGraphicsItem*);


и emit по тексту ?
Записан
troorl
Гость
« Ответ #6 : Март 09, 2007, 20:37 »

Компилятор говорит такое...

error: invalid conversion from QGraphicsItem* to frameItem*

добавлено спустя 53 минуты:

 Ну вроде с горем пополам сделал. Спасибо Улыбающийся
Записан
Вячеслав
Гость
« Ответ #7 : Март 09, 2007, 22:10 »

а как сделал-то ?
qobject_cast<T*>(obj);  али dynamic_cast ? Подмигивающий
Записан
troorl
Гость
« Ответ #8 : Март 09, 2007, 22:55 »

не, всё тривиально:
emit someSignal(*this);

и в заголовочном файле
signals:
void someSignal(frameItem &);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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