QT构建QWidget,QObject错误

时间:2016-09-23 19:49:19

标签: c++ qt build qmake

处理由其他人编写的大量代码,我对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。

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

1 个答案:

答案 0 :(得分:1)

Qt依赖于几种不同类型的生成文件,如果您的构建系统不管它是什么,都不知道这些依赖项,并且在您进行更改时不知道重新生成文件,然后你会收到很多由这些生成的文件过时引起的令人困惑的错误信息。

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

其他情况包括:

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

理想情况下,您的构建系统将具有依赖关系,该关系表明生成的MOC文件依赖于包含Q_OBJECT宏的匹配.h文件,然后您的构建系统将运行" moc"重新生成文件。如果您的构建系统没有这样做,那么您会感到非常沮丧。