Qt链接问题与MyClass :: metaobject VS2005

时间:2013-09-02 03:58:23

标签: c++ qt linker meta moc

在我开始之前很快,我已经搜索了SO和Google一段时间,试图解决这个问题并且没有成功。

我正在尝试编译我的项目,该项目过去常常使用某个库来提供基于Windows窗体的GUI功能。现在我的公司已经开始转向Qt了,我决定开始将我的小应用程序转换为支持Qt。

由于缺少标题,起初它根本不会编译。现在已经排序了,由于以下错误,我无法链接到最终的.exe。

Creating library Bin\VS_V8\Win32\Debug\Disp.lib and object Bin\VS_V8\Win32\Debug\Disp.exp
QtMainMenu.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall QtMainMenu::metaObject(void)const " (?metaObject@QtMainMenu@@UBEPBUQMetaObject@@XZ)
QtMainMenu.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall QtMainMenu::qt_metacast(char const *)" (?qt_metacast@QtMainMenu@@UAEPAXPBD@Z)
QtMainMenu.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall QtMainMenu::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@QtMainMenu@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
Bin\VS_V8\Win32\Debug\Disp.exe : fatal error LNK1120: 3 unresolved externals

我们公司有一个小型的“Qt测试应用程序”,这个应用程序是为了解决这个问题而编写的。我可以编译和链接那么好。根据我收集的内容,Qt文件必须满足以下属性:

  • 确保包含QTDir
  • 将UI文件添加到UIC编译器
  • 添加资源编译器的Resoruce文件
  • 添加到创建的头文件MOC编译器。

我注意到我错过了MOC Build Tool命令,因此我已将它们添加到我的UI文件标题中。然而,这并没有改变链接问题。我读到我应该删除所有构建的文件并进行干净以解决它。这也没有用。

我已经检查过了,并且在课堂上定义了Q_OBJECT。

我正在使用VS2005和Qt Addin。我没有为Qt开始一个新项目,但我只使用旧的Visual Studio Solution / VCProj。

下一步要去哪里?

1 个答案:

答案 0 :(得分:1)

@Cameron Stubber你需要moc个对象..你需要修改自定义构建步骤。

右键单击,您可以在头文件(包含Q_OBJECT)Custom Build Step中找到Properties。然后输入以下命令;

Command Line = $(QTDIR)\bin\moc.exe -I"$(QTDIR)\include\QtCore" -I"$(QTDIR)\include\QtGui" -I"$(QTDIR)\include" -I"$(QTDIR)\mkspecs\$(QMAKESPEC)" finddialog.h -o debug\moc_finddialog.cpp

Description = MOC finddialog.h

Outputs = debug\moc_finddialog.cpp

Additional Dependencies = $(QTDIR)\bin\moc.exe;finddialog.h

但是仔细阅读这些类型你需要在这里改变一些事情,比如$(QTDIR)这是我的环境变量,你需要写出你的QT所在的完整形式,如D:\qt_5\

并且你需要小心finddialog你应该写下你的.h and .cpp文件名

然后您需要通过右键单击解决方案资源管理器Add\New Filter来创建文件夹。将文件夹名称设为Generated Files

最后一步右键单击Generated Files添加\现有项目,您将在解决方案项目中看到Debug文件夹并添加moc_"projectName".cpp

然后重新构建您的解决方案。问题将得到解决。

另外,您应该添加C / C ++ / General / Additional Library Directories

$(QTDIR)\include
$(QTDIR)\include\QtGui
$(QTDIR)\include\QtCore

Link / General / Additional Library Directories

$(QTDIR)\lib

链接/输入/附加依赖

qtmaind.lib
QtCored4.lib
QtGuid4.lib

但不要忘记将$(QTDIR)更改为qt文件夹的enviroment variables或位置。与D:\qt_4.7.4

一样