Неопределенная ошибка эталонного компоновщика с сигналами и слотами

Используя 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).

Надеюсь, это поможет вам определить вашу неопределенную ссылку.

Другие вопросы по тегам