![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
greh |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 23.11.2009 Пользователь №: 1252 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
При наследовании от класса, который уже наследует QObject возникает проблема регистрации (соединения) слотов дочернего класса:
QObject -> Parent -> Child Данный код в конструкторе Child:
приводит к следуюшему сообщению: QObject::connect: No such slot Parent::testSlot1() in ..\test\child.cpp:6 Т.е. при регистрации почему-то берётся базовый класс, а не текущий. Попытки приведения this к Child ни к чему не привели. Parent.h: Раскрывающийся текст
Parent.cpp: Раскрывающийся текст
Child.h: Раскрывающийся текст
Child.cpp: Раскрывающийся текст
|
|
|
Trisch |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
а попробуй сделать слот виртуальным и объявить в базовом классе.
|
|
|
greh |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 23.11.2009 Пользователь №: 1252 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Trisch |
![]()
Сообщение
#4
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
А ты слот определил? А то я в коде чет это не заметил(
|
|
|
greh |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 23.11.2009 Пользователь №: 1252 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
greh |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 48 Регистрация: 23.11.2009 Пользователь №: 1252 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вообщем на windows системах, а может и на всех, есть такой баг, который лечится только ручной чисткой папки с банарниками и make файлами или её удалением (очистка в креаторе не помогает).
Побробнее написано тут(последнее сообщение). На случай смерти ссылки: Раскрывающийся текст Цитата Такое часто встречается вот в каком случае: — создаешь хедер и срр, пишешь класс — добавляешь в проект — прогоняешь qmake — потом добавляешь в класс слоты/сигналы В этом случае при запуске qmake'а в п.3 не создаются вызовы moc'а, т.к. не было нужно. После добавления сигналов/слотов нужны вызовы moc'а для генерации стабов. Вот их и не хватает для vtable'а. Простой повторный запуск qmake'а не спасает, надо удалить файлы object_script.XXX.debug и object_script.XXX.release. P.S. Это на винде, на других платформах может быть немного иначе, но идея думаю понятна. Ну и к тому же в Chid.h таки нужен макрос Q_OBJECT |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 8.3.2025, 9:30 |