定义的接口
----------------------------------------------
#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 定义插件的更多相关文章

  1. jQuery上定义插件并重设插件构造函数

    插件alert的全部代码,每个插件都定义在如下类似的作用域中: +function ($) { 'use strict'; // ALERT CLASS DEFINITION // ========= ...

  2. phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆

    统一登陆还是非常有必要的,安全,放心.代码 /*cordov 微信自己定义插件*/ (function (cordova) { var define = cordova.define; define( ...

  3. js自己定义插件-选项卡

    该功能比較简单.巩固一下jquery插件写法,注意引入的jquery.js  . 自己定义插件路径代码例如以下: 页面: <!doctype html> <html> < ...

  4. openstack页面自己定义插件使用具体解释(django、ajax、post)(zTree为例)

    感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正! 如有转载.请保留源作者博客信息. Better Me的博客:blog.csdn.net/tantexian 如需 ...

  5. Android Cordova 插件开发之编写自己定义插件

    前言 本文适合Android+web的复合型人才,由于cordova本身就是混合开发,所以在Android开发的基础上,还要懂web相关技术(HTML+CSS+JS).可是也有例外,比方我.仅仅需负责 ...

  6. Gradle自己定义插件

    Gradle自己定义插件 在Gradle中创建自己定义插件,Gradle提供了三种方式: 在build.gradle脚本中直接使用 在buildSrc中使用 在独立Module中使用 开发Gradle ...

  7. Qt Creator插件工作流程代码走读

    Qt Creator有个很风骚的插件管理器PluginManager,还有个很骚包的插件说明PluginSpec.基本上,所有的Qt程序的入口都是传统的C程序一样,代码流程从main()函数开始.  ...

  8. Qt webkit插件相关知识

    1.在Qt中使用 WebKit 浏览器核心 使用 QtWebKit 需要在工程文件(*.pro)中加入: 1.           QT +=webkit   2.           QT += n ...

  9. Qt自定义控件(插件)并添加到QtDesigher

    之前使用Qt的时候都是手写代码的(因为批量按钮可以使用数组实现),但当界面越来越复杂时,这种开发效率就太低了; 后来就开始使用QtDesigner,但要使QtDesigner支持我自己写的控件,需要提 ...

随机推荐

  1. [刘阳Java]_CSS鼠标悬停

    小白在学习前端技术时候,一定会在刚开始的时候学习CSS2和CSS3的相关知识.这篇内容给大家介绍一个CSS鼠标悬停的效果.大家可以先看下面的效果图,然后我们在说一下实现的效果要求吧 上图效果非常简单和 ...

  2. Pytest单元测试框架之setup/teardown模块示例操作

    """模块级(setup_module/teardown_module)开始于模块始末,全局的函数级(setup_function/teardown_function)只 ...

  3. C++之vector容器

    一.STL的基本概念 STL(Standard Template Library)标准模板库大体上分为六大组件,分别为容器,算法,迭代器,仿函数,适配器和空间配置器,其中最重要的是容器,算法和迭代器, ...

  4. vue(24)网络请求模块axios使用

    什么是axios Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 主要的作用:axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能. a ...

  5. 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【一】

    基于小熊派鸿蒙季BearPi-HM_Nano HarmonyOS 鸿蒙系统Hi3861开发板NFC  开发步骤:1.购买开发板:某宝上购买就行 2.安装开发环境 3.下载源码 4.编写案例并执行 开发 ...

  6. 第七篇 -- 添加CSV Data Set Config

    参考链接:https://blog.csdn.net/vv19910825/article/details/82773220 先来看看我们开启的接口 @RequestMapping(value = & ...

  7. xshell中操作服务器笔记

    sudo su 获取root权限 cd 切换到相应文件夹 ll ls 查看文件夹内容 cp file folder 复制文件到文件夹 \cp为强制覆盖不提示 cp -r /packageA/* /cp ...

  8. Feign实战技巧篇

    介绍Feign在项目中的正确打开方式 看了上一期Feign远程调用的小伙伴可能会问:阿鉴,你不是说上一期讲的是Feign的99%常用方式吗?怎么今天还有正确打开方式一说呀? 阿鉴:是99%的常用方式, ...

  9. HCIA-网络层包结构

    网络层 关心-->转发 IPV4协议 IPV6协议 寻址 转发 标识位置 IPV6: 86DD MAC定位局部 网络定位全局 对于上层数据如果过大,网络层可以分组,实现分组转发 环路:发送了一个 ...

  10. Android开发没有一技之长就废了吗?

    写在前面的话 不知你发现没有,人到中年之后,时间流逝的速度仿佛越来越快? 还记得毕业那会儿,我们怀着新鲜和好奇踏进了职场,那个时候每天都是满满的挑战和需要学习的东西,感觉时间过得真慢啊: 不知道从什么 ...