这一部分内容参见

俺就挑最常见的说了

选择 Library C++库

选择Qt Plugin(共享库和静态链接库这一部分和Qt技术关系不大,本博客就不提了)

新建完了其目录结构如下

添加一个头文件

#ifndef TEST_H#define TEST_H#include 
#include 
class Test{public:    virtual ~Test(){}    virtual void doSomeThing(){        std::cout<< "Hellow Word!"<

注意使用 Q_DECLARE_INERFACE将一个类跟一个字符串("这个字符串应该是惟一的")映射起来

修改genericplugin.h

#ifndef GENERICPLUGIN_H#define GENERICPLUGIN_H#include 
#include 
#include "test.h"class GenericPlugin :        public QObject,        public virtual Test{    Q_OBJECT    Q_PLUGIN_METADATA(IID __PLUGINTEST_iid  )    Q_INTERFACES(Test)public:    GenericPlugin(QObject *parent = 0);};#endif // GENERICPLUGIN_H

修改genericplugin.cpp

#include "genericplugin.h"GenericPlugin::GenericPlugin(QObject *parent) :    QObject(parent){}#if QT_VERSION < 0x050000Q_EXPORT_PLUGIN2(untitled16, GenericPlugin)#endif // QT_VERSION < 0x050000

修改pro文件

QT       += core guiTARGET = untitled16TEMPLATE = libCONFIG += pluginSOURCES += genericplugin.cppHEADERS += genericplugin.h \    test.h

生成plugin,如果还有疑问可以参考Qt\Examples\Qt-5.4\widgets\tools\echoplugin这个例子

这一部分来说使用plugin

#include 
#include 
#include 
#include 
#include 
#include 
int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    //plugin 路径 这个路径最好在 qt.conf 文件里面定义....    QPluginLoader pluginLoader(R"(C:\Temp\qqqqq\build-untitled16-Desktop_Qt_5_4_0_MinGW_32bit-Debug\debug\untitled16.dll)");    QObject * obj = pluginLoader.instance();    if(obj){        Test * test = qobject_cast< Test * >(obj);        if(test){            test->doSomeThing();            delete test;        }    }else{        qDebug()<< pluginLoader.errorString();    }}