使用Qt Creator,我在Qt中创建了一个带有自定义插槽的类:
class CustomEdit : public QTextEdit
{
Q_OBJECT
public:
CustomEdit(QWidget* parent);
public slots:
void onTextChanged ();
};
但是,我收到此链接器错误:
undefined reference to 'vtable for CustomEdit'
文档说:
如果您在“未定义的LtableNtable引用”中遇到编译器错误,您可能忘记运行moc或在链接命令中包含moc输出。
......但这并不明显意味着什么。
我需要添加到我的班级或.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
编辑:
This question处理同样的问题,但答案并不清楚如何在Qt Creator中修复此问题。我是否需要将moc生成的.cpp文件显式添加到我要链接的文件列表中?这似乎是一种痛苦。
答案 0 :(得分:2)
Qt creator是一个用于创建Qt项目的IDE。就这样。但是qmake允许你建立项目。来自qmake manual,
qmake自动生成Makefile,因此创建每个Makefile只需要几行信息。 qmake根据项目文件中的信息生成Makefile。 qmake包含支持Qt开发的其他功能,自动包含moc和uic的构建规则。
您不必单独包含moc文件,但必须运行qmake,其中包含有关所需moc文件的所有信息。在qmake之后查看生成的Makefile.debug
或Makefile.release
,您可以找到所有moc文件。
现在在Qt创建者中运行qmake,只需转到将运行qmake的Build->RebuildAll
,所有(moc)文件也将生成并链接(在Makefile.debug中)。
希望这会使未定义的引用变得更加灵活。