Несколько возможных причин, по которым происходит ошибка «undefined reference» при использовании MOC в Qt:
- Неправильная связка приложения со статической библиотекой. 1 Например, если при компиляции проекта на основе Qt с помощью CMake не корректно связать приложение со статической библиотекой. 1
- Отсутствие реализации деструктора. 3 Ошибка может возникать, если деструктор объявлен, но не определён. 3
- Отсутствие генерации файла MOC. 3 После добавления классов, которые наследуются от QObject и имеют функции Q_OBJECT (например, сигналы и слоты), нужно вручную запустить «qmake» (без каких-либо параметров). 3 Так он сгенерирует Makefile, добавив вызовы к файлам MOC для новых классов. 3
Для решения проблемы можно попробовать очистить проект и пересобрать его, а если это не помогло — удалить каталог сборки и пересобрать снова. 2