• 3634阅读
  • 1回复

求助Qt插件工程中的接口头文件使用 [复制链接]

上一主题 下一主题
离线mpfishere
 
只看楼主 倒序阅读 楼主  发表于: 2013-04-09
最近正在开发一个Qt工程,需要抽象出一个插件接口如下:
  1. class CIGPlugin : public QObject
  2. {
  3. Q_OBJECT
  4. public:
  5. CIGPlugin(){};
  6. virtual ~CIGPlugin() {};
  7. public:
  8. virtual bool CreatePlugin() = 0;  // 创建插件
  9. };
  10. Q_DECLARE_INTERFACE(CIGPlugin, "com.example.plugin.CIGPlugin/1.0");
  11. #endif // CIGPlugin_h__

文件名为“CIGPlugin.h”,但是在使用这个头文件的时候出现了一些问题,如果不把CIGPlugin.h加入到插件工程vcproj中,则编译时会报错:
  1.   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情况下如何使用接口?非常感谢!
离线dbzhang800

只看该作者 1楼 发表于: 2013-04-09
可以把你的接口定义放置到一个动态库中,然后你的程序和插件都依赖于该动态库
快速回复
限100 字节
 
上一个 下一个