Неопределенная ошибка эталонного компоновщика с сигналами и слотами
Используя Qt Creator, я создаю класс с пользовательскими слотами в Qt:
class CustomEdit : public QTextEdit
{
Q_OBJECT
public:
CustomEdit(QWidget* parent);
public slots:
void onTextChanged ();
};
Однако я получаю эту ошибку компоновщика:
undefined reference to 'vtable for CustomEdit'
В документации сказано:
если вы получаете ошибки компилятора в соответствии с "неопределенной ссылкой на vtable для LcdNumber", вы, вероятно, забыли запустить moc или включить вывод moc в команду link.
... но не очевидно, что это значит.
Что-то мне нужно добавить в мой класс или в.pro-файл?
РЕДАКТИРОВАТЬ - Вот мой файл.pro:
QT + = сеть \ сценарий \ WebKit \ XML TARGET = MyApp ШАБЛОН = приложение SOURCES += main.cpp \ MainWindow.cpp \ CustomEdit.cpp HEADERS += MainWindow.h \ CustomEdit.h FORMS += mainwindow.ui
РЕДАКТИРОВАТЬ:
Этот вопрос касается тех же проблем, но ответы не дают понять, как я могу решить эту проблему в Qt Creator. Нужно ли явно добавлять сгенерированный moc файл.cpp в мой список файлов, которые нужно связать? Это похоже на боль.
1 ответ
Qt creator - это IDE, которая используется для создания ваших проектов Qt. Это все. Но qmake позволяет вам строить проект. Из руководства qmake,
qmake автоматизирует генерацию Make-файлов, так что для создания каждого Make-файла требуется всего несколько строк информации. qmake генерирует Makefile на основе информации в файле проекта. qmake содержит дополнительные функции для поддержки разработки с Qt, автоматически включая правила сборки для moc и uic.
Вам не нужно включать ваши файлы moc отдельно, но вы должны запустить qmake, который содержит всю информацию о необходимых файлах moc. Посмотрите на сгенерированный Makefile.debug
или же Makefile.release
после qmake и вы можете найти все файлы moc будут включены для вас.
Теперь, чтобы запустить qmake в Qt creator, просто перейдите в Build->RebuildAll
который запустит qmake, и все файлы (moc) также будут сгенерированы и связаны (в Makefile.debug).
Надеюсь, это поможет вам определить вашу неопределенную ссылку.