QML C++插件dll引用

 QML C++插件dll引用


插件的创建非常简单,但是它可以复用,并且为不同的应用程序扩展类型。使用创建的插件是非常灵活的
解决方案。关于插件一个很好的例子见QmlBook-In-Chinese 中最后一章介绍的例子。

本文主要备忘生成插件dll,怎么引用。

1.创建插件 ,Library->Qt Quick 2 Extension Plugin

 

#ifndef MYITEM_H
#define MYITEM_H

#include <QQuickItem>

class MyItem : public QQuickItem
{
    Q_OBJECT
    Q_DISABLE_COPY(MyItem)

public:
    MyItem(QQuickItem *parent = 0);
    ~MyItem();    

     Q_INVOKABLE void read();

};

#endif // MYITEM_H


#include "myitem.h"
#include <QDebug>
MyItem::MyItem(QQuickItem *parent):
    QQuickItem(parent)
{
    // By default, QQuickItem does not draw anything. If you subclass
    // QQuickItem to create a visual item, you will need to uncomment the
    // following line and re-implement updatePaintNode()

    // setFlag(ItemHasContents, true);
}

MyItem::~MyItem()
{
}


void MyItem::read()
{

    qWarning() << "qml cpp plugin ";
}


#pragma once

#include <QQmlExtensionPlugin>

class QMLCPPPluginPlugin : public QQmlExtensionPlugin
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")

public:
    void registerTypes(const char *uri);
};


#include "qmlcppplugin_plugin.h"
#include "myitem.h"

#include <qqml.h>

void QMLCPPPluginPlugin::registerTypes(const char *uri)
{
    // @uri com.mycompany.qmlcomponents
    qmlRegisterType<MyItem>(uri, 1, 0, "MyItem");
}

qmldir 文件

 module MyPlugin

 plugin QMLCPPPlugin

编译,生成release和debug   QMLCPPPlugin.dll 和 QMLCPPPlugind.dll

 

2.应用

 Application->Qt Quick Application

 

在应用程序新建文件夹DLL(DLL文件夹和QMLCPPPluginApp.pro同级目录),在DLL新建文件夹MyPlugin(此MyPlugin是qmldir文件中module).

注:如果qmldir中的module制定为 如 com.yourcompany.qmlxxxx 之类的, 那文件夹需要按 . 建立子文件夹,如 com/yourcompany/qmlxxx

把QMLCPPPlugin.dll ,QMLCPPPlugind.dll和qmldir复制到MyPlugin文件夹内。(D:\Test1\QMLCPPPluginApp\QMLCPPPluginApp\DLL\MyPlugin)

 

指定插件DLL的路径

 engine.addImportPath("D:/Test1/QMLCPPPluginApp/QMLCPPPluginApp/DLL/");

如果不指定,在Qt安装文件D:\ProgramFiles\Qt\Qt580\5.8\mingw53_32\qml目录新建文件夹MyPlugin,把QMLCPPPlugin.dll ,QMLCPPPlugind.dll和qmldir复制到MyPlugin文件夹内。

 


#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.addImportPath("D:/Test1/QMLCPPPluginApp/QMLCPPPluginApp/DLL/");
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}


import QtQuick 2.6
import QtQuick.Window 2.2
import MyPlugin 1.0
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MainForm {
        anchors.fill: parent
        mouseArea.onClicked: {
            cppPlugin.read()
            console.log(qsTr('Clicked on background. Text: "' + textEdit.text + '"'))
        }



    }

    MyItem{
        id:cppPlugin
    }
}


本文转载自:https://www.cnblogs.com/ike_li/p/6743599.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值