Qt有两种与插件有关的API。一种用来扩展Qt本身的功能,如自定义数据库驱动、图像格式、文本编解码等,称为Higher-Level AP,既高级接口。另一种用于应用程序的功能扩展,称为Lower-Level API,低级接口。前一种是建立在后一种的基础之上的。前一种是扩展Qt已有的一些插件系统。后者可以让开发者自己实现以一个插件系统。
让应用程序支持插件扩展的步骤:
1. 定义一个接口集(只有纯虚函数的类),用来与插件交流。
2. 用宏Q_DECLARE_INTERFACE()将该接口告诉Qt元对象系统。
3. 应用程序中用QPluginLoader来装载插件。
4. 用宏qobject_cast()来确定一个插件是否实现了接口。
示例代码如下:
接口类声明:
1 class FilterInterface
2 {
3 public:
4 virtual ~FilterInterface(){}
5 virtual QStringListfilters() const = 0;
6 virtual QImagefilterImage(const QString &filter, const QImage &image,QWidget* parent)=0;
7 };
8
9 Q_DECLARE_INTERFACE(FilterInterface, "com.trolltech.PlugAndPaint.FilterInterface/1.0")
是实现该接口的插件类的定义:
1 #include <QObject>
2 #include <QStringList>
3 #include <QImage>
4
5 #include <plugandpaint/interfaces.h>
6
7 class ExtraFiltersPlugin: public QObject, public FilterInterface
8 {
9 Q_OBJECT
10 Q_INTERFACES(FilterInterface)
11
12 public:
13 QStringListfilters() const;
14 QImagefilterImage(const QString &filter, const QImage &image,
15 QWidget *parent);
16 };