我们已经编译了VS2005的QT 4.6和QWT 5.2.0。Qt,VS2005,Qwt - 无法使用派生自Qwt小部件的类中的Q_OBJECT
我们试图从QwtDial派生一个类,派生类有插槽。所以,我们需要添加Q_OBJECT宏。然而,当我们这样做,链接器呛出这个错误:
错误LNK2001:无法解析的外部符号 “公用:静态结构QMetaObject常量QwtDial :: staticMetaObject”(?staticMetaObject @ QwtDial @@ 2UQMetaObject乙@@)
我已经看着Qwt.dll与依赖,并且它具有该功能。使用十六进制编辑器查看.lib文件显示它具有与该名称重叠的字符串完全匹配的内容。
我们在路径中有Qwt库。实际上,如果我重命名这个lib,那么它会给出一个错误,它找不到这个lib文件。所以,我们知道它正在寻找正确的lib。
如果我们跳过Q_OBJECT,那么所有东西都会使用几个QWT小部件(包括我们的非Q_OBJECT Qwt派生类)正确链接和绘制。
有谁知道什么会导致这个真烦人的链接器问题?
UPDATE:
我已验证我添加了Q_OBJECT的类肯定是越来越为其生成一个MOC文件。链接器错误实际上来自这个生成的MOC文件:
moc_GaugeWidget1.obj : error LNK2001: unresolved external symbol "public: static
struct QMetaObject const QwtDial::staticMetaObject"
([email protected]@@[email protected]@B)
因此,它看起来像是一些非常典型和非常规的东西。该符号绝对在lib中。
+1:谢谢,它帮助!我认为,QWT中缺少定义开关。就像“如果在这个库中使用,将QWT_DLL设置为Q_DECL_EXPORT,否则将QWT_DLL设置为空”。这就是为什么你应该设置QWT_DLL手动清空,如果使用QWT头。 – 2011-07-05 12:53:43
谢谢,它确实有效! – 2012-04-19 13:03:19