Qt5该插件机制(7)--插件开发演示示例代码(Lower-level API)
插件代码
接口类的头文件 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)的更多相关文章
- java 添加一个线程、创建响应的用户界面 。 演示示例代码
javajava 添加一个线程.创建响应的用户界面 . 演示示例代码 来自thinking in java 4 21章 部分的代码 夹21.2.11 thinking in java 4免费下载: ...
- Qt5的插件机制(1)--Qt 框架中的插件载入机制概述
概述 Qt的源代码中通过 Q<pluginType>Factory.Q<pluginType>Plugin 和 Q<pluginType> 这三个类实现了Qt的插件 ...
- Qt5该插件机制(2)--QxxxFactory类和QFactoryLoader类别
<<<<<<<<<<<<<<<<<<<<<<<<< ...
- Qt5该插件机制(4)--QtMeta信息窗口小部件metaData
<<<<<<<<<<<<<<<<<<<<<<<<< ...
- Qt5的插件机制(6)--开发Qt插件时几个重要的宏
怎样开发Qt插件,能够在Qt Assistant 中搜索"Qt Plugins"或"How to Create Qt Plugins",看看那篇manual中的 ...
- unity Dotween插件的简单介绍及示例代码
unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的 ...
- [2017-08-21]Abp系列——如何使用Abp插件机制(注册权限、菜单、路由)
本系列目录:Abp介绍和经验分享-目录 Abp的模块系统支持插件机制,可以在指定目录中放置模块程序集,然后应用程序启动时会搜索该目录,加载其中所有程序集中的模块. 如何使用这套机制进行功能插件化开发? ...
- jquery插件机制
jQuery插件开发全解析 jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命 ...
- php中的钩子(hook插件机制)
对"钩子"这个概念其实不熟悉,最近看到一个php框架中用到这种机制来扩展项目,所以大概来了解下. hook插件机制的基本思想: 在项目代码中,你认为要扩展(暂时不扩展)的地方放置一 ...
随机推荐
- Spring的事务管理和数据库事务相关知识
1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱. ...
- Android JNI编程(七)——使用AndroidStudio编写第一个JNI程序
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 1.简单介绍一下NDK和JNI NDK:NDK是Native Develop ...
- Android 用MediaRecorder录制视频太短崩的问题
具体表现: 调用MediaRecorder的start()与stop()间隔不能小于1秒(有时候大于1秒也崩),否则必崩. 错误信息: java.lang.RuntimeException: stop ...
- ### Hibernate中的事务与并发 ###
**事务相关的概念** 1. 什么是事务 * 事务就是逻辑上的一组操作,组成事务的各个执行单元,操作要么全都成功,要么全都失败. * 转账的例子:冠希给美美转钱,扣钱,加钱.两个操作组成了一个事情! ...
- 自旋锁解决StackOverflowError案例
本节笔者分享一个在实际工作中遇到的栈内存溢出(StackOverflowError)问题,以及其解决方案. 问题介绍:笔者负责的一个Java Web项目在启动的时候,需要有一些初始化操作,而接下来的代 ...
- active set method(激活集方法)
在优化问题的求解中,如果待优化(最大最小)的目标函数,其解集受限于一组约束条件, g1(x)≥0,-,gk(x)≥0 约束条件定义着可行域(feasible region),对于可行域中的任一点 x ...
- [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 ...
- UiwebView and html
基础篇: NSURL介绍 http://blog.csdn.net/ysy441088327/article/details/7416759 网页执行js代码 复制代码 stringByEvalu ...
- 【BZOJ 1030】[JSOI2007]文本生成器
[题目链接]:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1030 [题意] [题解] /* 先把AC自动机搞出来; 然后利用AC自动机,把 ...
- Extensible File System
An extensible file system format for portable storage media is provided. The extensible file system ...