插件代码

接口类的头文件 MyPluginInterface.h

#ifndef INTERFACES_H
#define INTERFACES_H #include <QtPlugin> #define QtPluginDemo_iid "org.qt-project.Qt.PluginDemo" class MyPluginInterface
{
public:
virtual int add(int,int) = 0 ; // 正确写法
// virtual int add(int,int); // 不太妥的写法(尽管这也是正确的虚函数声明语句)
// 注:接口类中的虚函数都应有实体,或设置为0(推荐)。这样
// C++的编译器才干为接口类生成虚函数表。 否则,假设没有实现
// 接口类的虚函数也没有将其设为0,程序在在链接时可能会失败,
// 或者链接成功但最后生成的库无法载入(库中有没有定义的符号)
}; Q_DECLARE_INTERFACE ( MyPluginInterface, QtPluginDemo_iid ) ; #endif

插件头文件 MyPlugin.h

#ifndef MYPLUGIN__H
#define MYPLUGIN__H #include <QObject>
#include <QDebug>
#include "MyPluginInterface.h" class MyPlugin : public QObject, public MyPluginInterface
{
Q_OBJECT
Q_PLUGIN_METADATA ( IID QtPluginDemo_iid FILE "MyPlugin.json")
Q_INTERFACES(MyPluginInterface) public:
int add(int,int);
}; #endif

插件源文件 MyPlugin.cpp

#include "MyPlugin.h"

int MyPlugin::add(int a , int b)
{
return a+b ;
} #include "moc_MyPlugin.cpp"

JSON文件 MyPlugin.json,本演示样例中该文件是空的。

project文件 MyPlugin.pro

TEMPLATE      = lib
CONFIG += plugin console
QT += core
HEADERS = MyPlugin.h MyPluginInterface.h
SOURCES = MyPlugin.cpp
OTHER_FILES = MyPlugin.json
TARGET = MyPlugin
DESTDIR = ./
INCLUDEPATH += ./
# install
target.path = ./install
INSTALLS += target

应用程序代码

接口类头文件 MyPluginInterface.h,该文件与插件代码中的一致。

主程序文件 main.cpp

#include "MyPluginInterface.h"
#include <QtPlugin>
#include <QApplication>
#include <QWidget>
#include <QPluginLoader>
#include <QString>
#include <QtDebug> int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget w;
QObject* object ;
w.show(); app.addLibraryPath(QString("../MyPlugin/install")); // 加入库路径
// 载入插件,取得实例
QPluginLoader l(QString("MyPlugin")) ;
//QPluginLoader l(QString("libMyPlugin.so")) ; if ( (object=l.instance()) != NULL )
{
qDebug("plugin loaded .");
// 使用插件
int a = 14 , b = 23 ;
MyPluginInterface* plugin = qobject_cast<MyPluginInterface*>(object) ;
if (plugin)
qDebug("%d + %d = %d",a,b,plugin->add(a,b));
}
else
{
qDebug("failed to load plugin !! ");
QString errorStr = l.errorString();
qDebug()<<errorStr;
}
return app.exec();
}

MyApp.pro

######################################################################
# Automatically generated by qmake (3.0) ? ? 11? 19 02:26:33 2014
###################################################################### TEMPLATE = app
QT += gui core widgets
CONFIG += console
TARGET = MyApp
INCLUDEPATH += . # Input
HEADERS += MyPluginInterface.h
SOURCES += main.cpp

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Qt5该插件机制(7)--插件开发演示示例代码(Lower-level API)的更多相关文章

  1. java 添加一个线程、创建响应的用户界面 。 演示示例代码

    javajava 添加一个线程.创建响应的用户界面 . 演示示例代码 来自thinking in java 4 21章  部分的代码  夹21.2.11 thinking in java 4免费下载: ...

  2. Qt5的插件机制(1)--Qt 框架中的插件载入机制概述

    概述 Qt的源代码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件 ...

  3. Qt5该插件机制(2)--QxxxFactory类和QFactoryLoader类别

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  4. Qt5该插件机制(4)--QtMeta信息窗口小部件metaData

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  5. Qt5的插件机制(6)--开发Qt插件时几个重要的宏

    怎样开发Qt插件,能够在Qt Assistant 中搜索"Qt Plugins"或"How to Create Qt Plugins",看看那篇manual中的 ...

  6. unity Dotween插件的简单介绍及示例代码

    unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...

  7. [2017-08-21]Abp系列——如何使用Abp插件机制(注册权限、菜单、路由)

    本系列目录:Abp介绍和经验分享-目录 Abp的模块系统支持插件机制,可以在指定目录中放置模块程序集,然后应用程序启动时会搜索该目录,加载其中所有程序集中的模块. 如何使用这套机制进行功能插件化开发? ...

  8. jquery插件机制

    jQuery插件开发全解析 jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命 ...

  9. php中的钩子(hook插件机制)

    对"钩子"这个概念其实不熟悉,最近看到一个php框架中用到这种机制来扩展项目,所以大概来了解下. hook插件机制的基本思想: 在项目代码中,你认为要扩展(暂时不扩展)的地方放置一 ...

随机推荐

  1. WebService--概述、JDk实现、AJAX调用

    一.Webservice概述 W3C组织对其的定义是,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计. Webservice服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来 ...

  2. [Recompose] Compute Expensive Props Lazily using Recompose

    Learn how to use the 'withPropsOnChange' higher order component to help ensure that expensive prop c ...

  3. Linux系统编程——线程私有数据

    在多线程程序中.常常要用全局变量来实现多个函数间的数据共享.因为数据空间是共享的,因此全局变量也为全部线程共同拥有. 測试代码例如以下: #include <stdio.h> #inclu ...

  4. ios开发网络学习二:URL转码以及字典转模型框架MJExtension的使用

    一:url转码,当url中涉及到中文的时候,要考虑转码,用UTF8对中文的url进行转码 #import "ViewController.h" @interface ViewCon ...

  5. php课程 5-19 php数据结构函数和常用函数有哪些

    php课程 5-19 php数据结构函数和常用函数有哪些 一.总结 一句话总结: 1.php数据结构函数有哪些(四个)? • array_pop();从最后弹出一个值,返回弹出值• array_pus ...

  6. 利用函数的惰性载入提高 javascript 代码性能

    在 javascript 代码中,因为各浏览器之间的行为的差异,我们经常会在函数中包含了大量的 if 语句,以检查浏览器特性,解决不同浏览器的兼容问题.例如,我们最常见的为 dom 节点添加事件的函数 ...

  7. 访问sharepoint站点自动使用当前用户名和密码登录

    https://blog.csdn.net/zw_2011/article/details/7417123 1.把sharepoint站点添入可信站点.   点击菜单栏“工具”——〉“Internet ...

  8. [Compose] 14. Build curried functions

    We see what it means to curry a function, then walk through several examples of curried functions an ...

  9. php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort)

    php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort) 一.总结 核心是排序 ...

  10. 原生js如何实现图片翻转旋转效果?

    原生js如何实现图片翻转旋转效果? 一.总结 1.通过给元素设置style中的transition来实现的. 2.我昨天纠结的效果全部可以通过精读这个代码后实现. 二.原生js如何实现图片翻转旋转效果 ...