在VS2010项目中使用Q_OBJECT给出了未解析的外部

时间:2012-09-19 12:42:23

标签: visual-studio-2010 qt qmake unresolved-external moc

我正在尝试在Visual Studio 2010 Ultimate项目中使用Q_OBJECT宏,它给了我未解决的外部错误:

1>Application.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall MyButton::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MyButton@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>Application.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall MyButton::qt_metacast(char const *)" (?qt_metacast@MyButton@@UAEPAXPBD@Z)
1>Application.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall MyButton::metaObject(void)const " (?metaObject@MyButton@@UBEPBUQMetaObject@@XZ)

我有一个使用QMaker的类似项目,并通过干净的项目和重新运行qmake来解决它。问题是,VS中没有“Qmake”按钮!

我读过很多文章,比如this one,并完成了他们告诉我的一切。虽然它没有真正帮助,因为我已经有一些.cpp和一些头文件的现有项目,我想避免创建.pro文件并将代码移入其中。

我已经安装了VS Qt插件,它在VS面板上给了我新的酷“Qt”按钮,虽然没有帮助解决未解决的外部(可能我不知道如何正确使用它)。

我已经在我的Application.h文件中使用VS中的自定义构建工具运行了moc(唯一一个有Q_OBJECT的文件),但这仍然没有帮助:

C:\Utilities\QtSDK\Desktop\Qt\4.8.1\msvc2010\bin\moc Application.h -o tmp\moc\moc_Application.cpp

可能导致我的问题的原因是什么?如何解决?

1 个答案:

答案 0 :(得分:5)

我猜你忘了将MOC生成的文件(在本例中为moc_Application.cpp)添加到Visual Studio项目中。你必须这样做才能确保它被构建。我很确定这应该解决你看到的链接器错误。