Спустя примерно месяц просеивания в Google, чтобы найти ответ на этот вопрос, я, наконец, только что смог решить его.
Большинство ответов скажут вам удалить каталог сборки или запустить qmake
снова и так далее, и идея этого (очень упрощенного) заключается в том, что мета-компилятор QT генерирует дополнительные файлы .cpp
для классов с макросом Q_OBJECT
в своем объявлении класса, и иногда может "забыть" сгенерировать эти файлы когда в проект были добавлены дополнительные файлы, использующие макрос Q_OBJECT
.
Хотя в большинстве случаев это верно, решение проблемы для меня произошло после finally проверки mainwindow_moc.cpp
подать сам.
Пришел, чтобы узнать, что внешний виджет Qt, который я импортировал в свой проект (и с тех пор прекратил использовать, но забыл извлечь исходные файлы из моего проекта), имел некоторые объявления пространства имен и операторы using
, которые казались чтобы запутать MO C при создании моего mainwindow_moc.cpp
файла.
В результате MO C сгенерировал мои функции MainWindow, ограниченные этим пространством имен дополнительного виджета, и сгенерированный код, который выглядел как extra_namespace::MainWindow::staticMetaObject
вместо MainWindow::staticMetaObject
.
Поэтому для меня было просто удалить этот виджет из моего файла .pro
и все директивы #include
для этих заголовочных файлов.
Так что, если первое решение не работает для вас, то есть удаление каталога сборки и запуск qmake
вручную ... посмотрите на файлы classname_moc.cpp
, сгенерированные в вашем каталоге сборки, и убедитесь, что сгенерированные функции, необходимые для макроса Q_OBJECT
, имеют правильную область видимости.