неопределенная ошибка эталонного компоновщика с сигналами и слотами - PullRequest
1 голос
/ 10 июня 2010

Используя 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 += network \
    script \
    webkit \
    xml
TARGET = MyApp
TEMPLATE = app
SOURCES += main.cpp \
    MainWindow.cpp \
    CustomEdit.cpp 
HEADERS += MainWindow.h \
    CustomEdit.h
FORMS += mainwindow.ui

РЕДАКТИРОВАТЬ:

Этот вопрос имеет дело сте же проблемы, но ответы не дают понять, как я могу решить эту проблему в Qt Creator.Нужно ли явно добавлять сгенерированный moc файл .cpp в мой список файлов, которые нужно связать?Это похоже на боль.

1 Ответ

2 голосов
/ 10 июня 2010

Qt creator - это IDE, которая используется для создания ваших проектов Qt.Это все.Но qmake позволяет вам строить проект.Из qmake manual ,

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).

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

...