一:问题
1.用Qt编译一个带界面的dll,此类继承QWidget
#ifndef THEAPP_H
#define THEAPP_H
#include <QObject>
#include <QtCore/qglobal.h>
#include <QWidget>
#if defined(THEAPP_LIBRARY)
# define THEAPPSHARED_EXPORT Q_DECL_EXPORT
#else
# define THEAPPSHARED_EXPORT Q_DECL_IMPORT
#endif
namespace Ui {
class TheApp;
}
class THEAPPSHARED_EXPORT TheApp : public QWidget
{
Q_OBJECT
public:
explicit TheApp(QWidget *cmdGraphView, QObject *parent = 0);
QWidget* GetMainWindow();
void RegisterCmdGraphView(QGraphicsView *widget);
void SetLogo(const QIcon &icon);
private:
Ui::TheApp *ui;
};
2.新建一个Qt工程,加载上述dll
编译报错error:definition of static data member ‘*::staticMetaObjectExtraData’ of dllimport
二:解决方法
1.原因是在pro文件中加了HEADERS +=TheApp.h
2.Qt4.8.4编译器的问题: 隐式调用的时候在工程树中添加: HEADERS +=TheApp.h 这样导致TheApp.h的全局引用,由于从QWidget继承,所以编译的时候会生成moc_TheApp.cpp文件,导致如上错误。
3.解决办法是将TheApp.h 从工程树中移除,只在用到的代码地方引用。比如: #include "…/TheApp.h " 这样就可以了。