2017-03-20 5 views
1

J'ai une bibliothèque qui utilise QwtPlotMagnifier, entre autres classes Qwt. J'ai décidé de sous-classer QwtPlotMagnifier afin que je puisse émettre un signal lorsque l'intrigue est redimensionnée. La bibliothèque (mylib.lib) se compile, mais l'application qui l'utilise se plaint maintenant d'un external non résolu lié à la sortie moc de QwtPlotMagnifier.Non résolue externe lors du sous-classement qwt class

Je lie qwt statiquement; donc l'exigence d'avoir la directive QWT_DLL du préprocesseur dans la bibliothèque de plus bas niveau ne s'applique pas ici.

est ici l'erreur (la sous-classe est appelée PlotMagnifier):

mylib.lib(moc_PlotMagnifier.obj) : error LNK2001: unresolved external symbol "public: static struct QMetaObject const QwtPlotMagnifier::staticMetaObject" ([email protected]@@[email protected]@B) 

Rien de spécial au sujet de la déclaration de la sous-classe:

#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); 
}; 

Je suis sur Visual Studio 2013 FWIW. Mon application inclut toujours qwtd.lib comme elle l'a toujours fait. Cela doit être une erreur stupide de ma part .. kickstart mon cerveau s'il vous plaît, quelqu'un!

Répondre

0

Ajoutez la ligne suivante dans le fichier de projet d'application (.pro):

CONFIG += qwt 

ajouter également cette ligne pour configurer la « bibliothèque très bas qui appelle QWT dans votre fichier de projet:

+0

Je pensais avoir abordé ces deux points ci-dessus - J'utilise MSVC pour compiler, donc je n'ai pas de CONFIG à configurer (et j'utilise déjà QWT avec succès). Aussi, je lie qwt statiquement, donc je n'ai pas besoin de QWT_DLL; en fait, si je définis cela, je reçois des erreurs partout – mike

+1

Je le reprends! Après le nettoyage et la reconstruction, je peux compiler très bien avec QWT_DLL. Cela résout le problème, merci beaucoup! – mike

+0

Je ne comprends pas la downvote ici ... cela semble correct. – Bebs

0

Vérifiez, si vous avez tous besoin inclut en vous projet Visual studio.

C/C++/Additional Include Directories
ici devrait être un chemin à <qwt_dir\include> être

Linker/General/Additional Library Directories
doit ici être un chemin à <qwt_dir\lib> être

Linker/Input
Si inclure qwtd.lib (pour la configuration debug) et qwt.lib (pour release)

En outre, vérifier que vous avez ces entrées dans Release et Debug configurations, il est facile de configurer seulement Debug, whil e travaille sur la configuration Release.

En outre, vérifiez que vous avez le fichier moc_* (quelque chose comme moc_plotmagnifier.cpp) pour votre PlotMagnifier sous Generated Files dans votre vue du projet, parfois Qt Addin ne les ajouter.