MyClass::元对象VS2005的Qt链接问题

Qt Link Issue with MyClass::metaobject VS2005

本文关键字:Qt 链接 问题 VS2005 对象 MyClass      更新时间:2023-10-16

就在我开始之前,我在SO和谷歌上搜索了很长一段时间,试图解决这个问题,但没有成功。

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

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

Creating library BinVS_V8Win32DebugDisp.lib and object BinVS_V8Win32DebugDisp.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)
BinVS_V8Win32DebugDisp.exe : fatal error LNK1120: 3 unresolved externals

我们公司有一个小的"Qt测试应用程序",它是为了玩而写的,这就是我导入的基础。我可以很好地编译和链接。根据我所收集的,以下属性必须符合Qt文件:

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

我注意到我缺少MOC构建工具命令,所以我将它们添加到了UI文件的头中。然而,这并没有改变链接问题。我读到我应该删除所有构建的文件并进行清理以解决它。这也不起作用。

我已经检查过了,Q_OBJECT是在类中定义的。

我将VS2005与Qt Addin一起使用。我没有为Qt启动一个新项目,但是,我只是使用旧的Visual Studio解决方案/VCProj。

有什么想法下一步该去哪里吗?

@Cameron Stubber您需要moc对象。。您需要修改自定义生成步骤。

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

Command Line = $(QTDIR)binmoc.exe -I"$(QTDIR)includeQtCore" -I"$(QTDIR)includeQtGui" -I"$(QTDIR)include" -I"$(QTDIR)mkspecs$(QMAKESPEC)" finddialog.h -o debugmoc_finddialog.cpp
Description = MOC finddialog.h
Outputs = debugmoc_finddialog.cpp
Additional Dependencies = $(QTDIR)binmoc.exe;finddialog.h

但仔细地写下这些类型,你需要在这里改变一些东西,比如$(QTDIR),这是我的环境变量,你需要写下QT所在位置的完整形式,比如D:qt_5

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

然后,您需要右键单击解决方案资源管理器AddNew Filter来创建一个文件夹。。将文件夹名称设为Generated Files

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

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

您还应该添加C/C++/通用/附加库目录

$(QTDIR)include
$(QTDIR)includeQtGui
$(QTDIR)includeQtCore

和链接/通用/附加图书馆目录

$(QTDIR)lib

链接/输入/附加依赖

qtmaind.lib
QtCored4.lib
QtGuid4.lib

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