在我开始之前很快,我已经搜索了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文件必须满足以下属性:
我注意到我错过了MOC Build Tool命令,因此我已将它们添加到我的UI文件标题中。然而,这并没有改变链接问题。我读到我应该删除所有构建的文件并进行干净以解决它。这也没有用。
我已经检查过了,并且在课堂上定义了Q_OBJECT。
我正在使用VS2005和Qt Addin。我没有为Qt开始一个新项目,但我只使用旧的Visual Studio Solution / VCProj。
下一步要去哪里?
答案 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