这一部分内容参见
俺就挑最常见的说了
选择 Library C++库
选择Qt Plugin(共享库和静态链接库这一部分和Qt技术关系不大,本博客就不提了)
新建完了其目录结构如下
添加一个头文件
#ifndef TEST_H
#define TEST_H
#include <iostream>
#include <QString>
class Test{
public:
virtual ~Test(){}
virtual void doSomeThing(){
std::cout<< "Hellow Word!"<<std::endl;
}
};
QT_BEGIN_NAMESPACE
#define __PLUGINTEST_iid "org.qt-project.Qt.QGenericPluginFactoryInterface"
Q_DECLARE_INTERFACE(Test, __PLUGINTEST_iid)
QT_END_NAMESPACE
#endif // TEST_H
注意使用 Q_DECLARE_INERFACE将一个类跟一个字符串("这个字符串应该是惟一的")映射起来
修改genericplugin.h
#ifndef GENERICPLUGIN_H
#define GENERICPLUGIN_H
#include <QObject>
#include <QtPlugin>
#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这个例子
这一部分来说使用plugin
#include <QCoreApplication>
#include <iostream>
#include <cstdlib>
#include <QPluginLoader>
#include <QDebug>
#include <test.h>
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();
}
}
转载于:https://blog.51cto.com/nanguazhude/1613802