最近正在
开发一个Qt工程,需要抽象出一个
插件接口如下:
- class CIGPlugin : public QObject
- {
- Q_OBJECT
- public:
- CIGPlugin(){};
- virtual ~CIGPlugin() {};
- public:
- virtual bool CreatePlugin() = 0; // 创建插件
- };
- Q_DECLARE_INTERFACE(CIGPlugin, "com.example.plugin.CIGPlugin/1.0");
- #endif // CIGPlugin_h__
头
文件名为“CIGPlugin.h”,但是在使用这个
头文件的时候出现了一些
问题,如果不把CIGPlugin.h加入到插件工程vcproj中,则
编译时会报错:
- error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall CIGPlugin::metaObject(void)const " ([email]?metaObject@CIGPlugin@@UBEPBUQMetaObject@@XZ[/email])
在网上搜了一下,原因是Qt采用moc动态
信号槽系统,因此由于CIGPlugin继承了QObject,所以需要引用CIGPlugin.h生成的moc_CIGPlugin.cpp文件,才能找到相关的代码。
如果将CIGPlugin.h加入到插件工程中,就不会报错了,但是和
其他的插件工程共用时,会提示moc来源不一致的情况,也就是CIGPlugin.h加入过两次,两个插件工程分别生成过moc_CIGPlugin.cpp文件。
求高手指教在继承QObject情况下如何使用接口?非常感谢!