QT有着独特的插件管理方法便于使用,调理清晰.完全可以替代WIN32下的动态库,静态库.不过,QT也支持动态库和静态库加载.见QLibrary,最终,QLibrary调用WIN32下的LoadLibrary,GetProcAddress函数.

Qt插件的使用方法:
[1]project_main_1工程中定义接口

[2]project_plugin_1工程中实现接口

[3]project_main_1中使用QPluginLoader,QPluginLoader内部实现也是使用LoadLibrary,GetProcAddress,稍后会有说明

用法1:

用法2:

 

这里可以看出,充分的使用了对象对象的多态.那么,是QpluginLoader是如何实现的呢?

看下面细节.

Qt的类几乎所有的都有一个QT_class+private的类,用来实现具体逻辑,暴露给我们的类定义通用的接口.QpluginLoader的内部类是QLibraryPrivate,与QLibrary是同一个.

[1]如何加载

[2]qt_plugin_instance是定义导出的呢?

在实现接口时,必须加上Q_EXPORT_PLUGIN2,Q_EXPORT_PLUGIN2 (PluginName,ClassName)

宏定义:

[3]instancetypedefQObject *(*QtPluginInstanceFunction)();

这样就实现了QT的插件.但是还没完.

在定义接口时,还应加上Q_DECLARE_INTERFACE,This macro associates the given Identifier (a string literal) to the interface class called ClassName. The Identifier must be unique.