Russian Qt Forum

Qt => Общие вопросы => Тема начата: chu от Май 24, 2013, 10:49



Название: (Решено) проблема с сигналом
Отправлено: chu от Май 24, 2013, 10:49
Объявляю в заголовке класса сигнал, вызываю его в теле одного из методов класса с помощью emit, но при сборке ошибка:  undefined reference to myclass::my_signal (unsigned char*). Как такое возможно?


Название: Re: проблема с сигналом
Отправлено: Странник от Май 24, 2013, 10:57
Объявляю в заголовке класса сигнал, вызываю его в теле одного из методов класса с помощью emit, но при сборке ошибка:  undefined reference to myclass::my_signal (unsigned char*). Как такое возможно?
приведите минимальный пример вашего кода, чтобы мы тут не гадали.


Название: Re: проблема с сигналом
Отправлено: xokc от Май 24, 2013, 10:59
Если всё-же погадать...

Если ничего не напутано с сигнатурой сигнала, то это значит, что moc не сформировал соответствующую обёртку над этим сигналом. Это может происходить, если:
1. Отсутствует макрос Q_OBJECT в классе с сигналом
2. Файл с описанием класса с сигналом не включён в проект
3. Описание класса делается в cpp файле.


Название: Re: проблема с сигналом
Отправлено: chu от Май 24, 2013, 11:12
Если всё-же погадать...

Если ничего не напутано с сигнатурой сигнала, то это значит, что moc не сформировал соответствующую обёртку над этим сигналом. Это может происходить, если:
1. Отсутствует макрос Q_OBJECT в классе с сигналом
2. Файл с описанием класса с сигналом не включён в проект
3. Описание класса делается в cpp файле.
Макрос Q_OBJECT присутствует в классе родителе (QGraphicsView, если добавить этот макрос в заголовок моего унаследованного класса появляется ошибка: undefined reference to vtable for MyClass. Что такое vtable я понятия не имею


Название: Re: проблема с сигналом
Отправлено: chu от Май 24, 2013, 11:27
Файлы срр и h в проект добавлены через pri файл, по кнопке F2  (перейти к символу под курсором) из срр файла курсор перемещается в заголовочный к объявлению сигнала.


Название: Re: проблема с сигналом
Отправлено: mutineer от Май 24, 2013, 11:34
Q_OBJECT должен быть в каждом классе, который хочет использовать сигналы-слоты

чтобы убрать ошибку с vtable попробуй полностью пересобрать проект с нуля


Название: Re: проблема с сигналом
Отправлено: xokc от Май 24, 2013, 11:48
Q_OBJECT должен быть в каждом классе, который хочет использовать сигналы-слоты
Именно так


Название: Re: проблема с сигналом
Отправлено: GreatSnake от Май 24, 2013, 11:54
Q_OBJECT должен быть в каждом классе, который хочет использовать сигналы-слоты
Именно так
Не совсем так)
Q_OBJECT должен быть в каждом классе, который хочет использовать свои сигналы-слоты


Название: Re: проблема с сигналом
Отправлено: chu от Май 24, 2013, 13:28
Q_OBJECT должен быть в каждом классе, который хочет использовать сигналы-слоты

чтобы убрать ошибку с vtable попробуй полностью пересобрать проект с нуля
Спасибо!
Помогло, заработало!