c++ - MyClass::metaobject VS2005 的 Qt 链接问题

标签 c++ qt linker meta moc

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

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

起初它根本无法编译,因为缺少 header 。现在已经排序了,由于以下错误,我无法链接我的最终 .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
  • 将 UIC 编译器添加到 UI 文件
  • 将资源编译器添加到资源文件
  • 将 MOC 编译器添加到创建的头文件中。

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

我查过了,类中定义了Q_OBJECT。

我正在使用带有 Qt 插件的 VS2005。然而,我没有为 Qt 启动新项目,我只是使用旧的 Visual Studio 解决方案/VCProj。

知道下一步要去哪里吗?

最佳答案

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

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

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 和 .cpp 文件名

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

最后一步右击Generated Files add\existing item,你会在你的解决方案Project中看到Debug文件夹并添加moc_"projectName".cpp

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

您还应该添加 C/C++/General/Additional Library Directories

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

和链接/通用/附加库目录

$(QTDIR)\lib

链接/输入/附加依赖

qtmaind.lib
QtCored4.lib
QtGuid4.lib

但不要忘记将 $(QTDIR) 更改为您的环境变量 或您的 qt 文件夹的位置。比如D:\qt_4.7.4

关于c++ - MyClass::metaobject VS2005 的 Qt 链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18565471/

相关文章:

c - 使用 VS 2013 编译器将 .a 文件与 CMake 链接

c++ - 为 CreateDirectory 将 'const char*' 转换为 'LPCTSTR'

c++ - unordered_map 找不到 key

c++ - 链接器错误 - 从 C 文件调用 C++ 文件中的函数

c++ - 找不到可执行文件,请指定一个

qt - 如何在调试时让 CLion 不显示 QString 值?

linux - 交叉编译: can't resolve symbol 'register_printf_function'

c++ - 为什么 basic_ifstream 显示错误的结果?

c++ - 通过 C++ 中的类的二维数组

c++ - QT QTableWidget::item() 返回 nullptr,即使 widget 分配给它