在开始之前,我已经在 SO 和 Google 上搜索了很长一段时间试图解决这个问题,但没有成功。
我正在尝试编译我的项目,该项目曾经使用某个库来提供基于Windows Forms的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 构建工具命令,因此我已将它们添加到我的 UI 文件的标题中。然而,这并没有改变链接问题。我读到我应该删除所有构建的文件并进行清理来解决它。这也不起作用。
我查了一下,类中定义了Q_OBJECT。
我正在使用 VS2005 和 Qt Addin。我没有为 Qt 启动一个新项目,但是,我只是使用旧的 Visual Studio 解决方案/VCProj。
有什么想法下一步要去哪里吗?
@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
添加现有项目,您将在解决方案项目中看到调试文件夹并添加moc_"projectName".cpp
然后重新构建您的解决方案。问题就会解决。
您还应该添加 C/C++ /General/Additional Library 目录
$(QTDIR)\include
$(QTDIR)\include\QtGui
$(QTDIR)\include\QtCore
以及链接/常规/附加库目录
$(QTDIR)\lib
链接/输入/附加依赖项
qtmaind.lib
QtCored4.lib
QtGuid4.lib
但不要忘记将
$(QTDIR)
更改为您的 enviroment variables
或 qt 文件夹的位置。喜欢D:\qt_4.7.4