4

我试图在我的 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”按钮!

我读过几篇像这样的文章,并做了他们告诉我的一切。虽然它并没有真正帮助,因为我有一个现有的几个 .cpp 和一些头文件的项目,我想避免创建一个 .pro 文件并将代码移动到其中。

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

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

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

什么可能导致我的问题,我该如何解决?

4

1 回答 1

5

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

于 2012-09-19T12:52:40.253 回答