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插件机制的基本思想: 在项目代码中,你认为要扩展(暂时不扩展)的地方放置一 ...
随机推荐
- LDAP Browser/Editor v2.8.2
https://www.netiq.com/communities/cool-solutions/wp-content/uploads/sites/2/2009/07/Gawor_ldapbrowse ...
- VCS编译仿真警告Warning
VCS编译仿真警告Warning 问题描述 在较大的SOC集成中,通常使用Perl脚本例化子模块到Top层,然而,有时会出现例化出来的输入端口名没有在Top层定义,而且端口的位宽为1bit,那么,ve ...
- TF-IDF模型
TF-IDF模型 1. 理论基础 由于数据挖掘所有数据都要以数字形式存在,而文本是以字符串形式存在.所以进行文本挖掘时需要先对字符串进行数字化,从而能够进行计算.TF-IDF就是这样一种技术,能够将字 ...
- js,jquery遍历数组,对象
each的用法 1.数组中的each 复制代码 var arr = [ "one", "two", "three", "four ...
- 【a702】贷款利率
Time Limit: 10 second Memory Limit: 2 MB 问题描述 当一个人从银行贷款后,在一段时间内他将不得不每月尝还固定的分期付款.这个问题要求计算机出贷款者向银行支付的利 ...
- 为什么 qt 成为 c++ 界面编程的第一选择?
为什么qt成为c++界面编程的第一选择 一.前言 为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C++界面都是基于MFC,也做过5年左右.当时为什么会从M ...
- listener监听器笔记
listener:三个域对象的监听器,,还有属性的变化. 监听三个域对象的创建和销毁:servletContextListenerservletRequestListenerservletsessio ...
- xp2p系统的10点技术创新和经验总结
最近在开发完善九天鸟的xp2p系统,解决了很多技术问题,特此总结下. 第一个项目开发,非常重要,它对建立开发规范.团队协作.开发效率,有很重大的意义. 1.分页前台AJAX异步分页,用咱们自己的fup ...
- 主从同步设置的重要参数log_slave_updates
说明:最近部署了mysql的集群环境,详细如下M01和M02为主主复制,M01和R01为主从复制:在测试的过程中发现了以下问题: 1.M01和M02的主主复制是没有问题的(从M01写入数据能同步到M0 ...
- 【计算机视觉】OpenCV中直方图处理函数简述
计算直方图calcHist 直方图是对数据集合的统计 ,并将统计结果分布于一系列提前定义的bins中.这里的数据不只指的是灰度值 ,统计数据可能是不论什么能有效描写叙述图像的特征. 如果有一个矩阵包括 ...