我有一个使用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,因为它一直有。这对我来说是一个愚蠢的错误。请开启我的大脑,有人!
答案 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
)
另外,请检查Release
和Debug
配置中是否包含这些条目,在Debug
配置工作时,只需配置Release
即可。
另外,请检查项目视图中moc_*
下的moc_plotmagnifier.cpp
是否有PlotMagnifier
文件(类似Generated Files
),有时Qt addin无法添加它们。