封装QML插件


环境MSVC2019-x64+Qt5.15.2

1、 新建插件工程

2、工程名为SPMaker

默认生成的dll插件名=Target=工程名

3、设置详情

其中MyItem是默认添加的C++类,测试期间可以不修改名字;

URI是使用时引入的包名,建议和工程名一致

4、这里主要测试QML插件,工程生成后将MyItem类删除

5、将spmarker_plugin.cpp中与MyItem相关的删除

6、在根目录下新建QML文件夹,方便存放QML文件

7、在文件夹里新建资源文件

8、在资源文件里新建需要导出的QML文件

9、新建待导出QML文件所依赖的QML文件

其中MyRect.qml是希望别人能够直接使用的qml

其中BaseRect.qml是一个基础qml,由MyRect.qml里调用

需要注意的是:BaseRect.qml最终会被编译进dll,故打包时不需要复制,MyRect.qml需要

10、在spmarker_plugin.cpp中注册QML组件

qmlRegisterType(QUrl("qrc:/qml/MyRect.qml"), uri, 1, 0, "MyRect");

11、分别在Debug和Release下构建工程,收集生成的dll、qmldir、MyRect.qml

12、新建文件夹SPMaker,即与包名一致

13、将11步中生成的文件放进文件夹

此文件夹如果放在D:\Qt5.15.2\5.15.2\msvc2019_64\qml下,则当前环境所有Quick工程都可以直接使用,因为Qt会自动把这个路径作为import查找路径。

我这里是存放到Third_Party文件夹,此文件夹由git同步,方便其他同事可以同步使用。

14、此时使用这个插件会没有提示,通过qmlplugindump来生成提示文件

打开对应Qt版本的终端,进入SPMaker文件夹的上层目录,输入指令:

qmlplugindump -nonrelocatable SPMarker 1.0 ./ > SPMarker/plugin.qmltypes

此时在SPMaker文件夹里已经生成了plugin.qmltypes文件

15、修改qmldir,增加一句话:

typeinfo plugin.qmltypes

大功告成,需要注意:

1、一定要Debug和Release下的dll都编译,不然Debug工程使用Release的dll会报错插件未安装

2、为了方便将需要的文件自动生成到指定路径,在pro里这样配置:

TEMPLATE = lib
TARGET = SPMarker
QT += qml quick
CONFIG += plugin c++11

###########生成路径,debug和release可放在同一文件夹里##########
contains(DEFINES, WIN64) {
    message("WIN64")
    DESTDIR = $$(Third_Party)/WpQuickControls/msvc2019_64/SPControls/$$TARGET
} else {
    message("WIN32")
    DESTDIR = $$(Third_Party)/WpQuickControls/msvc2019/SPControls/$$TARGET
}

TARGET = $$qtLibraryTarget($$TARGET)   #如果是debug就加上d
uri = SPMarker


#####生成qmltypes文件#####
#CONFIG += qmltypes
#QML_IMPORT_NAME = SPMarker
#QML_IMPORT_MAJOR_VERSION = 1
#QMLTYPES_FILENAME = $$DESTDIR/plugins.qmltypes


#####源码路径#####
SOURCES += \
        spmarker_plugin.cpp

HEADERS += \
        spmarker_plugin.h


#####资源文件#####
RESOURCES += \
    QML/qml.qrc


#####定义需要拷贝的文件#####
DISTFILES = \
    QML/MyRect.qml \
    qmldir

#####待拷贝文件路径#######
file.files += $$DISTFILES    #files代表需要拷贝的文件

#####文件拷贝目标路径######
file.path = $$DESTDIR/       #path代表文件需要拷贝到的目的路径

#target.path += $$PWD/      #dll在当前文件夹也会生成
#INSTALLS +=  target file   #dll在当前文件夹也会生成

INSTALLS += file             #注意必须给build的make参数里加上install,不然不会执行install

3、为了方便自动生成qmltypes文件,新建bat脚本,并执行

D:/Qt5.15.2/5.15.2/msvc2019_64/bin/qmlplugindump -nonrelocatable SPMarker 1.0 ../ > plugin.qmltypes

按需修改,参数对应为:qmlplugindump路径+nonrelocatable参数+模块名+模块父路径+版本+输出符号+qmltypes文件名

搜索

复制