QML插件扩展(一)
准备分两节来介绍QML扩展插件,分别为
(一)基于QML文件的扩展方式
(二)基于C++的插件扩展
这篇先介绍基于QML的插件扩展。
先介绍几个基本概念:
qmldir: 用于组织自定义的QML插件,qmldir的具体写法可参考
.qmltypes:qml插件的解释文件,用于QtCreator语法高亮。可通过Qt提供的工具qmlplugindump自动生成
QML_IMPORT_PATH: 导入插件路径,以支持插件的语法高亮。个人理解是如果纯QML文件的扩展,没有封装到C++中,则直接导入路径,即可支持语法高亮,如果有C++封装,则需要通过.qmltypes支持高亮。
addImportPath: 添加import寻址目录,c++代码里添加,没有前两项,只是QtCreator不能高亮,没有这种,则插件无法使用。
具体步骤
一、建立插件工程
1.建立工程,首先通过QtCreator创建一个QMLPluginTest子目录工程:

2.在QMLPluginTest子目录下,添加app测试工程
3.新建QML插件工程,MyPlugin

4.新建向导会自动创建示例文件及插件名称,这里可自己修改URI名称,即你的插件名称

5.自动创建的MyPlugin生成目录结构如图:

其中qmldir文件描述的插件的组成:
module MyPlugin
plugin QMLPlugin
6.这节只介绍纯QML的插件方式,先不管自动生成的插件文件。
7.在MyPlugin目录下,添加扩展qml,这里添加一个测试矩形,MyRect.qml

8.在qmldir中添加MyRect.qml,

二、使用插件
1. 在app工程的main.qml中,import MyPlugin 1.0,

2.主要到右边代码中有让人郁闷的波浪线,说明QtCreator没有识别你的插件,需要QML_IMPORT_PATH来标记,打开app.pro文件
默认创建时QML_IMPORT_PATH =,没有赋值,修改为插件的路径,建议这里使用相对路径
QML_IMPORT_PATH = $$PWD/../
3.关闭QtCreator,重新打开,可以红色波浪线么有了
4.在main.qml中,使用创建的MyRect

5.最后一步,导入插件路径,在app的main.cpp添加import代码,如果没有这句,程序启动会报错误:
qrc:/main.qml:3 module "MyPlugin" is not installed
所以需在c++中添加importPath,代码如下:
QQmlApplicationEngine engine;
engine.addImportPath("E:/T/QMLPlugin/QMLPluginTest/");(注意这里导入路径是MyPlugin的上层文件夹,不是MyPlugin文件夹)
如果没有指定插件的生成目录,在release或者debug模式下编译, 在release模式下生成的路径为"...\QMLPlugin\release",需要新建一个MyPlugin
文件夹,把"...\QMLPlugin\release\QMLPlugin.dll"和”...\QMLPlugin\qmldir“一起拷贝到MyPlugin文件夹里面,然后将MyPlugin的上层文件夹
放到addImportPath(“”)中,比喻我的电脑为“E:\QT Project\TQ\LeiSigSlot\build-QMLPluginTest-Desktop_Qt_5_2_1_MinGW_32bit-Release\QMLPlugin”,插件目录为“E:\QT Project\TQ\LeiSigSlot\build-QMLPluginTest-Desktop_Qt_5_2_1_MinGW_32bit-Release\QMLPlugin\MyPlugin”
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
6.最后的程序目录结构:

附录:
1.程序生成路径:E:\T\QMLPlugin\build
2.程序源代码下载地址
https://github.com/youngerking1985/QML_Learn/tree/master/QMLPlugin1
QML插件扩展(一)的更多相关文章
- QML插件扩展2(基于C++的插件扩展)
上一节介绍了纯QML的插件扩展方式,这种扩展方式基本满足大部分的扩展需求,下面开始介绍比较小众的基于C++的扩展 (一)更新插件工程 1.更新MyPlugin工程下的qmldir文件,加入plugin ...
- [Unity]Unity3D编辑器插件扩展和组件扩展
1. 插件扩展 1.1. 命名空间 using UnityEditor; using UnityEngine; //非必需,常用到 1.2. 使用语法 [MenuItem("Assets/M ...
- 百度umeditor富文本编辑器插件扩展
富文本编辑器在WEB开发中经常用到,个人比较喜欢用百度出的ueditor这款,ueditor这款本身支持插件扩展的,但是ueditor的mini版本 umeditor 就没有那么方便了,不过找了很多资 ...
- Chrome插件(扩展)开发全攻略
[干货]Chrome插件(扩展)开发全攻略:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html
- FireFox 浏览器插件/扩展开发学习
2014-11-08 内容存档在evernote,笔记名"FireFox 浏览器插件/扩展开发学习"
- jQuery的noConflict以及插件扩展
一.noConflict函数 JavaScript有很多插件,如果jQuery对象的$与其他插件冲突,我们可以使用noConflict()方法去掉$或者使用其他的符号代替 注:noConflict() ...
- jQuery笔记之工具方法extend插件扩展
jQuery工具方法 $.extend()插件扩展(工具方法) $.fn.extend()插件扩展(实例方法) 浅度克隆.深度克隆 两个方法基本是一样的,唯一不同的就是调用方式不一样 -------- ...
- Chrome插件(扩展)
[干货]Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均 ...
- 开发chrome插件(扩展)
官方文档 https://developer.chrome.com/extensions/getstarted.html [干货]Chrome插件(扩展)开发全攻略 http://blog.haoji ...
随机推荐
- 微信小程序入门——Mustache语法学习
微信小程序中用到了大量Mustache语法,特发此文学习一下 1.简单的变量调换:{{name}} 1 var data = { "name": "Willy" ...
- 关于IOS的Cocoapods相关问题
Cocoa Pods确实是一个方便的工具,特别是在敏捷开发多个项目的时候,一个工具重复使用,大量节约时间: 可以及时更新github上面的开源库代码,只要改动Podfile文件中对应的开源库的版本号即 ...
- ssh: scp命令
scp 复制命令 Eg. -r /tmp/q1 root@[::]/home 1.命令格式: scp [参数] [原路径] [目标路径] 2.命令功能: scp是 secure copy的缩写, sc ...
- jquery makearray()使用
makearray(),转换一个类似数组的对象成为真正的JavaScript数组.首先看看jquery中array的定义 makeArray: function( arr, results ) { v ...
- javascript 限制字符串字数换行 带BUG
function chang(str ,len) { function lenStat(str) { function isChinese(str) { //判断是不是中文 var reCh = /[ ...
- ggplot2 theme相关设置—线条设置
在ggplot的主题射中有一部分图需要对图中的部分线条进行设置 element_line(colour = NULL, size = NULL, linetype = NULL, lineend = ...
- tomcat下获取当前路径的url中含有空格解决方法
参考博文(http://www.360doc.com/content/11/1009/17/4602013_154657565.shtml) web项目发布到Tomcat之后,如果tomcat是安装在 ...
- poj 2299 Ultra-QuickSort 逆序对模版题
用树状数组求逆序数 唯一的坑点就是sum要用long long存 直接贴代码了 以后忘了还能直接看 2333…… PS:和hdu3743代码是一样的,因为两个都是逆序对模版题…… #include&l ...
- sql优化原则
尽量使用性能高的比如left join等,尽量减少数据查询的column,尽量不要查询冗余数据,like的话“%%”是没有 办法使用索引的,但是“%”是可以使用索引的 having以前一直不知道到底真 ...
- Openjudge-计算概论(A)-与7无关的数
描述: 一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数.现求所有小于等于n(n < 100)的与7无关的正整数的平方和. 输入输入为一行,正整数n( ...