Qt插件

Qt插件就是一个共享动态库(dll文件),将动态库给其他的程序使用。

创建Qt插件步骤:

(1) 定义一个接口类,也就是至少有一个纯虚函数的类;

(2) 在接口类中,使用宏Q_DECLARE_INTERFACE(ClassName, Identifier)注册接口类;

              #ifndef REGEXPINTERFACE_H
#define REGEXPINTERFACE_H

#include 

class RegExpInterface
{
public:
    virtual ~RegExpInterface() {}
    virtual QString regexp(const QString &message) = 0;
};

Q_DECLARE_INTERFACE(RegExpInterface, "org.qter.Examples.myplugin.RegExpInterface")
#endif
              
          

宏Q_DECLARE_INTERFACE在接口类定义完后再使用,宏的第1个参数,是接口类的类名,第2个参数,是一个字符串,表示接口的唯一标识符

(3) 定义插件类,插件类必须多继承QObject类和接口类;

(4) 在插件类中,使用宏Q_PLUGIN_METADATA()声明插件元数据;

(5) 在插件类中,使用宏Q_INTERFACES()告诉Qt哪些插件完成接口;

              #ifndef REGEXPPLUGIN_H
#define REGEXPPLUGIN_H

#include 
#include "regexpinterface.h"

class RegExpPlugin : public QObject, RegExpInterface
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "org.qter.Examples.myplugin.RegExpInterface" FILE "myplugin.json")
    Q_INTERFACES(RegExpInterface)

public:
    QString regexp(const QString &message);
};

#endif
              
          

宏Q_PLUGIN_METADATA有两个参数,第1个参数IID,与接口类中的唯一标识符对应,第2个参数FILE,是对应一个json文件,该参数可选,如果该参数使用了,那么json文件必须在插件类所在头文件目录中