1. 应用程序与插件加载
对于QT应用程序来讲,一个插件就是一个类的实例。插件的可用的方法由对应的接口类来决定。接口类仅仅包含纯虚函数,也就是说接口并不实现任何方法函数。插件通过继承QObject且继承对应的接口类来实现内部的具体函数功能。当应用程序用QPLuginLoader类加载可能的插件时,就会得到一个指向QObject的指针。通过将这个对象用qobject_cast 强制封装成接口类,应用程序就会分辨出插件是否真正实现了期望的接口,如果是就被加载成正确的插件。
要让QPluginLoader正确工作需要两个条件:1.插件接口类需要用宏Q_DECLARE_INTERFACE来声明;2.插件类本身也需要用Q_INTERFACES宏来声明表示实现了接口。这两个宏能够安全地让插件类与插件接口类匹配。事实上,QT在加载插件时有一个如下的检测标准,如果不满足,插件就不能正确加载。检查标准列表:
- 构件插件与应用程序的Qt版本必须一致,也就是major与minor数字一样;
- 构件插件与应用程序必须在同一个平台,同一操作系统,同一编译器中