Кажется, в Qt Creator все еще есть ошибка.
У меня большой проект, в котором несколько классов имеют Q_OBJECT, а другое количество классов не имеет Q_OBJECT. Работает нормально. Однако, если я добавляю Q_OBJECT в один из классов, у которых его нет, при попытке его собрать я получаю эту ошибку «collect2: ld return 1 exit status».
Проверяя каталог сборки, я вижу, что файл moc для этого класса отсутствует. Qt просто не создает файлы moc для него! Однако, если я удаляю заголовочные файлы и файлы cpp из проекта и добавляю их снова, это работает, файлы moc генерируются и проект создается успешно.
Эта проблема, кажется, возникает, только если у меня есть класс, у которого не было Q_OBJECT, и он был успешно собран в прошлом. Новый класс с Q_OBJECT, который никогда не компилировался перед добавлением «Q_OBJECT», всегда работает нормально.
Итак, если эта проблема возникает, и вы уверены, что все правильно добавили (а комментирование Q_OBJECT позволяет правильно построить проект), сделайте следующее:
- удалить файлы .h и .cpp (в которые вы только что добавили Q_OBJECT) из проекта.
- снова добавить их в проект
- чистый проект
- построить его снова.
EDIT
В некоторых случаях достаточно запустить qmake
(Build / Run qmake), за которым следует Clean All
.