这一部分内容参见

利用Qt插件实现HellowWord_第1张图片

俺就挑最常见的说了

利用Qt插件实现HellowWord_第2张图片


选择 Library C++库

利用Qt插件实现HellowWord_第3张图片

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

新建完了其目录结构如下

利用Qt插件实现HellowWord_第4张图片

添加一个头文件

#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 < 0x050000
Q_EXPORT_PLUGIN2(untitled16, GenericPlugin)
#endif // QT_VERSION < 0x050000

修改pro文件

QT       += core gui
TARGET = untitled16
TEMPLATE = lib
CONFIG += plugin

SOURCES += genericplugin.cpp

HEADERS += genericplugin.h \
    test.h

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

利用Qt插件实现HellowWord_第5张图片


这一部分来说使用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();
    }

}