qt 定义插件
定义的接口
----------------------------------------------
#ifndef REGEXPINTERFACE_H
#define REGEXPINTERFACE_H
#include <QString>
class RegExpInterface
{
public:
virtual ~RegExpInterface()
{
}
virtual QString regexp(const QString &message)=0;
};
Q_DECLARE_INTERFACE(RegExpInterface, "org.myplugin.RegExpInterface")
#endif // REGEXPINTERFACE_H
实现的接口的类 头文件
---------------------------------------------
#define REGEXPPLUGIN_H
#include <QObject>
#include <QString>
#include "regexpinterface.h"
class RegExpPlugin : public QObject, RegExpInterface
{
Q_OBJECT
Q_PLUGIN_METADATA (IID "org.myplugin.RegExpInterface")
Q_INTERFACES(RegExpInterface)
public:
QString regexp(const QString &message);
};
#endif // REGEXPPLUGIN_H
源文件
-------------------------------------
#include "regexpplugin.h"
QString RegExpPlugin::regexp(const QString &message)
{
return "hello world";
}
pro 文件
-------------------------------------
HEADERS += \
regexpplugin.h \
regexpinterface.h
SOURCES += \
regexpplugin.cpp
TEMPLATE=lib
CONFIG +=plugin
TARGET =regexpplugin
测试插件的窗口
窗口的头文件
-----------------------------------------
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "regexpinterface.h"
#include <QPluginLoader>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
RegExpInterface *regInterface;
Ui::MainWindow *ui;
bool loadPlugin();
};
#endif // MAINWINDOW_H
窗口的源文件
----------------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::loadPlugin()
{
QPluginLoader loader("../plug/plugin.dll");
QObject *obj= loader.instance();
if(obj)
{
regInterface=qobject_cast<RegExpInterface *>(obj);
if(regInterface)
{
QString str= regInterface->regexp("jjjkk");
ui->Result->setText(str);
}
}
}
void MainWindow::on_pushButton_clicked()
{
this->loadPlugin();
}
插件中常用的pri文件
------------------------------------------------
HEADERS += \
$$PWD/common/HpQRCodeInterface.h
PROJECT_COMPONENTSOURCE = $$PWD/common
PLUGIN_INSTALL_DIRS = $$[QT_INSTALL_LIBS]/ukui-demo-plugin

qt 定义插件的更多相关文章
- jQuery上定义插件并重设插件构造函数
插件alert的全部代码,每个插件都定义在如下类似的作用域中: +function ($) { 'use strict'; // ALERT CLASS DEFINITION // ========= ...
- phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆
统一登陆还是非常有必要的,安全,放心.代码 /*cordov 微信自己定义插件*/ (function (cordova) { var define = cordova.define; define( ...
- js自己定义插件-选项卡
该功能比較简单.巩固一下jquery插件写法,注意引入的jquery.js . 自己定义插件路径代码例如以下: 页面: <!doctype html> <html> < ...
- openstack页面自己定义插件使用具体解释(django、ajax、post)(zTree为例)
感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正! 如有转载.请保留源作者博客信息. Better Me的博客:blog.csdn.net/tantexian 如需 ...
- Android Cordova 插件开发之编写自己定义插件
前言 本文适合Android+web的复合型人才,由于cordova本身就是混合开发,所以在Android开发的基础上,还要懂web相关技术(HTML+CSS+JS).可是也有例外,比方我.仅仅需负责 ...
- Gradle自己定义插件
Gradle自己定义插件 在Gradle中创建自己定义插件,Gradle提供了三种方式: 在build.gradle脚本中直接使用 在buildSrc中使用 在独立Module中使用 开发Gradle ...
- Qt Creator插件工作流程代码走读
Qt Creator有个很风骚的插件管理器PluginManager,还有个很骚包的插件说明PluginSpec.基本上,所有的Qt程序的入口都是传统的C程序一样,代码流程从main()函数开始. ...
- Qt webkit插件相关知识
1.在Qt中使用 WebKit 浏览器核心 使用 QtWebKit 需要在工程文件(*.pro)中加入: 1. QT +=webkit 2. QT += n ...
- Qt自定义控件(插件)并添加到QtDesigher
之前使用Qt的时候都是手写代码的(因为批量按钮可以使用数组实现),但当界面越来越复杂时,这种开发效率就太低了; 后来就开始使用QtDesigner,但要使QtDesigner支持我自己写的控件,需要提 ...
随机推荐
- Requests方法 -- session方法
import requests#禁用安全请求警告from requests.packages.urllib3.exceptions import InsecureRequestWarningreque ...
- IDEA搭建springmvc环境之后无故出现404
其实这应该是IDEA的自身问题 打开项目结构
- Docker编排利器DockerCompose
Docker 编排利器 DockerCompose,编排之后可以一次性通过一条命令启动一组服务 例如一条命令启动 SpringBoot 项目,同时启动 SpringBoot 项目依赖的其他中间件(My ...
- 支付二维码整合 - 三码合一支持支付宝、QQ、微信
支付二维码整合 - 三码合一支持支付宝.QQ.微信 1. 前提:获取各个二维码的具体内容 在写代码前,我们需要先获取不同支付方式的二维码内容.很简单,只需要打开各个支付码,截图,然后随便找个可以扫码的 ...
- 标准化R包开发流程
3个武器: devtools:各种开发小工具的合集,让开发变得简单,非常实用 roxygens:通过注释的方式,生成文档,远离LaTex的烦恼 testthat:单元测试,让R包稳定.健壮.减少升级的 ...
- cookie详解(八)
一.什么是cookie 1.大概了解 什么是 Cookie?针对不同用户,做出不同的响应.,这就是Cookie的原理.是浏览器储存在用户的机器上的(可见免用户名登录)1. Cookie翻译过来是饼干的 ...
- 判断Windows系统是32位或64位并执行不同脚本命令
判断Windows系统是32位或64位并执行不同脚本命令 https://www.autoahk.com/?p=16549&preview=true https://www.cnblogs.c ...
- 通过cmake在Android中调用c语言,且三方应用通过so库调用c语言
1. 新建JniUtils类实现native方法 2. 在build中执行clean project 再rebuild project 生成class文件. 注意:最新版本的AndroidStud ...
- 手动实现instanceof函数
instanceof 功能 a instanceof b 官方解释为检查构造函数b的prototype 有没有出现在a的原型链上.比如: function A() { } function B() { ...
- openstack June all-in-one 安装手册
by lt,hyc 1.安全规范 表1:openstack用户和密码值设置 用户名 含义 本文的设置值 Admin openstack管理员用户 ADMIN_PASS Keystone openst ...