未解析的外部符号:QMetaObject const QwtPlotMagnifier::staticMetaObject

Unresolved external symbol: QMetaObject const QwtPlotMagnifier::staticMetaObject

我有一个使用 QwtPlotMagnifier 和其他 Qwt 类 的库。我决定将 QwtPlotMagnifier 子类化,以便在重新缩放绘图时发出信号。 库 (mylib.lib) 编译,但使用它的应用程序现在抱怨与 QwtPlotMagnifier 的 moc 输出相关的未解析外部。

我正在静态链接 qwt;因此在最低级别库中使用预处理器指令 QWT_DLL 的要求在这里不适用。

错误如下(子类名为PlotMagnifier):

mylib.lib(moc_PlotMagnifier.obj) : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlotMagnifier::staticMetaObject" (?staticMetaObject@QwtPlotMagnifier@@2UQMetaObject@@B)

子类声明没有什么特别之处:

#pragma once

#include "qwt_plot_magnifier.h"
/**
subclass of QwtPlotMagnifier to provide a signal when zooming is complete
*/
class PlotMagnifier : public QwtPlotMagnifier
{
    Q_OBJECT
public:
  explicit PlotMagnifier(QWidget *w);
  virtual ~PlotMagnifier();
signals:
  void rescaled();
protected:
  virtual void rescale(double factor);  
};

我在 visual studio 2013 年初。我的应用程序仍然像往常一样包含 qwtd.lib。这对我来说一定是一个愚蠢的错误..请启动我的大脑,某人!

将此行添加到 .pro 文件以向编译器提示外部符号:

DEFINES += QWT_DLL

文件中 qwt_global.h 有宏。如果没有这个宏,编译器会认为这是一个内部符号。

检查一下,如果您的 Visual Studio 项目中包含所有需要的内容。

C/C++ / Additional Include Directories
这里应该是 <qwt_dir\include> 的路径

Linker / General / Additional Library Directories
这里应该是 <qwt_dir\lib> 的路径

Linker / Input
应包括 qwtd.lib(对于 debug 配置)和 qwt.lib(对于 release

此外,请检查您在 ReleaseDebug 配置中是否有这些条目,在进行 Release 配置时,仅配置 Debug 很容易。

此外,请检查项目视图中 Generated Files 下的 PlotMagnifier 是否有 moc_* 文件(类似于 moc_plotmagnifier.cpp),有时 Qt 插件无法添加他们。