封装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文件名
搜索
复制