插件是什么
-
注意:这儿暂时不考虑静态插件(潜意识中总觉得它根本就不算插件)。
插件是一个动态库(共享库)。动态库是一个独立的文件中的独立模块,可被多个程序访问。
先看动态库的两种用法
1. 程序链接时指明动态库
这时程序中包含相应的头文件,编译时指定头文件路径,对于qmake来说:
LIBS += -L/path1/path2/.../ -labcd
INCLUDEPATH += /p1/p2/.../
这样一来,程序启动时会自动加载需要的链接库。
2. 程序中动态加载动态库
运行过程中找到来查找某个动态库,加载并解析出其中的某个函数。 Qt提供了QLibrary这个类来封装各个平台下的差异。
插件是提供特定接口的动态库
- 它是动态库
- 它需要一个或几个特定的接口(这样程序才能感知它)
- 它采用第二种加载方式
- Qt 为插件提供了 QPluginLoader,比通用 QLibrary 好用
Qt插件位置
动态加载,那么程序怎么知道去哪儿加载插件呢?
很多人抱怨,装有Qt的机器上一切正常,发布后,jpeg等格式图片看不成,数据库无法连接,汉字乱码...
其实答案很简单:
QCoreApplication 的 libraryPaths() 中有一些路径,比如:
- $QTDIR/plugins
- 可执行程序所在文件夹
然后程序启动后,会去这些路径下的下列子目录
-
imagesformats
中 找图片插件
sqldrivers
中 找数据库驱动插件