1

使用 Qt Creator,我在 Qt 中创建了一个带有自定义插槽的类:


class CustomEdit : public QTextEdit
{
    Q_OBJECT

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};

但是,我收到此链接器错误:

undefined reference to 'vtable for CustomEdit'

文档说:

如果您收到“未定义对 LcdNumber 的 vtable 的引用”行的编译器错误,您可能忘记运行 moc 或在链接命令中包含 moc 输出。

......但这意味着什么并不明显。

有什么我需要添加到我的班级或 .pro 文件中的吗?

编辑——这是我的 .pro 文件:

QT += 网络\
    脚本 \
    网络套件\
    xml
目标 = 我的应用
模板 = 应用程序
来源 += main.cpp \
    主窗口.cpp \
    自定义编辑.cpp
标题 += MainWindow.h \
    自定义编辑.h
表格 += 主窗口.ui

编辑:

这个问题处理同样的问题,但答案并没有说明我如何在 Qt Creator 中解决这个问题。我是否需要将 moc 生成的 .cpp 文件显式添加到要链接的文件列表中?这似乎是一种痛苦。

4

1 回答 1

2

Qt creator 是一个用于创建 Qt 项目的 IDE。就这样。但是 qmake 允许您构建项目。来自qmake 手册

qmake 自动生成 Makefile,因此创建每个 Makefile 只需要几行信息。qmake 根据项目文件中的信息生成 Makefile。qmake 包含支持使用 Qt 进行开发的附加功能,自动包括 moc 和 uic 的构建规则。

您不必单独包含您的 moc 文件,但您必须运行 qmake,其中包含有关所需 moc 文件的所有信息。查看生成的Makefile.debugMakefile.release之后的 qmake,您会发现所有 moc 文件都将包含在内。

现在要在 Qt creator 中运行 qmake,只需转到Build->RebuildAll将运行 qmake 的位置,所有(moc)文件也将生成并链接(在 Makefile.debug 中)。

希望这将消除您未定义的参考。

于 2010-06-10T04:39:53.953 回答