Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 带有信号和插槽的未定义引用链接器错误_Qt_Signals_Signals Slots_Slot_Moc - Fatal编程技术网

Qt 带有信号和插槽的未定义引用链接器错误

Qt 带有信号和插槽的未定义引用链接器错误,qt,signals,signals-slots,slot,moc,Qt,Signals,Signals Slots,Slot,Moc,使用Qt Creator,我在Qt中创建了一个具有自定义插槽的类: class CustomEdit : public QTextEdit { Q_OBJECT public: CustomEdit(QWidget* parent); public slots: void onTextChanged (); }; 但是,我收到以下链接器错误: undefined reference to 'vtable for CustomEdit' 文件说: 如果您在“und

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


class CustomEdit : public QTextEdit
{
    Q_OBJECT

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};
但是,我收到以下链接器错误:

undefined reference to 'vtable for CustomEdit'
文件说:

如果您在“undefined reference to vtable for LcdNumber”一行中遇到编译器错误,您可能忘记了运行moc或在link命令中包含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 QT+=网络\ 剧本\ 网络工具包\ xml TARGET=MyApp 模板=应用程序 SOURCES+=main.cpp\ MainWindow.cpp\ CustomEdit.cpp 标题+=MainWindow.h\ 自定义编辑.h FORMS+=mainwindow.ui 编辑:


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

Qt creator是一个用于创建Qt项目的IDE。这就是全部。但是qmake允许您构建项目。从

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

您不必单独包含moc文件,但必须运行qmake,其中包含有关所需moc文件的所有信息。在qmake之后查看生成的
Makefile.debug
Makefile.release
,您可以找到将为您提供的所有moc文件

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


希望这将删除您未定义的引用。

您是否尝试在SO中搜索?;-)谢谢,但我没有运行qmake,我使用Qt creator只是为了获取信息,我把一些.h错误地放在源代码中而不是头文件中,这会产生同样的错误。确实如此,谢谢。我还意识到,当我在QtCreator中创建一个新类时,我必须指定“继承QWidget”作为类型信息。考虑到我已经告诉IDE我的类派生自一个Qt类,我不得不显式地指定它似乎有些奇怪,但这确实起到了作用。