这一部分内容参见
俺就挑最常见的说了
选择 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(); }}