QT构建QWidget、QObject错误

QT build QWidget, QObject Errors

我正在处理别人编写的大量代码,我对 QT 不是很熟悉,但我最近的调试没有成功。

效果很好后,我添加了 3 行,然后将它们全部注释掉,测试时发现这两个错误有更多变体:

undefined reference to 'QObject::connectNotify(char const*)' (.rodata._ZTV15NumberWithUnits[_ZTV15NumberWithUnits]+0x60) undefined reference to 'QWidget::x11Event(_XEvent*) (.rodata._ZTV15NumberWithUnits[_ZTV15NumberWithUnits]+0x160)

我在想可能有一些库或其他构建错误,或者我需要做的文件清理,但我被卡住了。

在搜索并尝试了多种方法之后,我找到了几个类似的答案,例如 this one 我正在尝试实现添加 -lqt 语句或修复 qmake。

有关如何执行此操作或尝试其他操作的建议?

Qt 依赖于几种不同类型的生成文件,如果您的 build 系统(无论它是什么)不知道这些依赖关系并且不知道 re-generate当您更改这些文件时,您会收到许多由于这些生成的文件已过期而导致的令人困惑的错误消息。

在这种特定情况下,最有可能的是 "MOC"(meta-object 编译器)文件已过期。这些文件是从包含 Q_OBJECT 宏的包含文件生成的,它是创建它们的 "moc" 实用程序。

其他案例包括:

  • UI headers,它们是使用 "uic" 实用程序
  • 从 .ui (Qt Designer) 文件生成的
  • 资源文件 (.cpp),使用 "rcc" 实用程序从 .qrc 文件生成。

理想情况下,您的 build 系统将具有依赖项,表明生成的 MOC 文件依赖于包含 Q_OBJECT 宏的匹配 .h 文件,而您的 build 系统然后 运行 "moc" 到 re-generated 文件。如果您的 build 系统没有做到这一点,那么您会很沮丧。