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

时间:2017-03-20 11:35:44

标签: c++ qt qwt

我有一个使用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);  
};

我是视觉工作室2013 fwiw。我的应用程序仍然包含qwtd.lib,因为它一直有。这对我来说是一个愚蠢的错误。请开启我的大脑,有人!

2 个答案:

答案 0 :(得分:1)

将以下行添加到应用程序项目文件(.pro):

CONFIG += qwt

还要添加此行以配置“在项目文件中调用QWT的最低库:

DEFINES += QWT_DLL

答案 1 :(得分:0)

检查,如果您在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配置中是否包含这些条目,在Debug配置工作时,只需配置Release即可。

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