插件代码

接口类的头文件 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. Spring的事务管理和数据库事务相关知识

    1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱.         比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱. ...

  2. Android JNI编程(七)——使用AndroidStudio编写第一个JNI程序

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 1.简单介绍一下NDK和JNI NDK:NDK是Native Develop ...

  3. Android 用MediaRecorder录制视频太短崩的问题

    具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...

  4. ### Hibernate中的事务与并发 ###

    **事务相关的概念** 1. 什么是事务 * 事务就是逻辑上的一组操作,组成事务的各个执行单元,操作要么全都成功,要么全都失败. * 转账的例子:冠希给美美转钱,扣钱,加钱.两个操作组成了一个事情! ...

  5. 自旋锁解决StackOverflowError案例

    本节笔者分享一个在实际工作中遇到的栈内存溢出(StackOverflowError)问题,以及其解决方案. 问题介绍:笔者负责的一个Java Web项目在启动的时候,需要有一些初始化操作,而接下来的代 ...

  6. active set method(激活集方法)

    在优化问题的求解中,如果待优化(最大最小)的目标函数,其解集受限于一组约束条件, g1(x)≥0,-,gk(x)≥0 约束条件定义着可行域(feasible region),对于可行域中的任一点 x ...

  7. [Django] Get started with Django -- Install python and virtualenv

    Install python3 on MacOS: brew install python3 Come alone with python3, there are also some other to ...

  8. UiwebView and html

    基础篇: NSURL介绍 http://blog.csdn.net/ysy441088327/article/details/7416759 网页执行js代码   复制代码 stringByEvalu ...

  9. 【BZOJ 1030】[JSOI2007]文本生成器

    [题目链接]:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1030 [题意] [题解] /* 先把AC自动机搞出来; 然后利用AC自动机,把 ...

  10. Extensible File System

    An extensible file system format for portable storage media is provided. The extensible file system ...