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文件夹)

engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

6.最后的程序目录结构:

附录:

1.程序生成路径:E:\T\QMLPlugin\build

2.程序源代码下载地址

https://github.com/youngerking1985/QML_Learn/tree/master/QMLPlugin1

时间: 2024-10-05 23:07:07

QML插件扩展(一)的相关文章

QML插件扩展2(基于C++的插件扩展)

上一节介绍了纯QML的插件扩展方式,这种扩展方式基本满足大部分的扩展需求,下面开始介绍比较小众的基于C++的扩展 (一)更新插件工程 1.更新MyPlugin工程下的qmldir文件,加入plugin MyPlugin, 其中MyPlugin是插件的动态库名称,在windows下对应MyPlugin.dll,在linux下多月MyPlugin.so 2.编译MyPlugin插件,生成MyPlugin.dll,这里工程没有copy配置,所以默认dll不会拷贝到E:/T/QMLPlugin/QMLP

JQuery时间格式化插件--扩展JQuery

(function($){ $.formatDate = function(pattern,date){ //如果不设置,默认为当前时间 if(!date) date = new Date(); if(typeof(date) ==="string"){ if(date=="") date = new Date(); else date = new Date(date.replace(/-/g,"/")); } /*补00*/ var toFix

jQuery的noConflict以及插件扩展

一.noConflict函数 JavaScript有很多插件,如果jQuery对象的$与其他插件冲突,我们可以使用noConflict()方法去掉$或者使用其他的符号代替 注:noConflict()函数不能调用两次,上面代码是方便向读者展示 二.jQuery的插件扩展 jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法. jQuery 的全局函数就是属于jQuery命名空间的函数,另一种是对象级别的插件开发,即给jQu

最值得收藏优秀推荐的 Google Chrome 谷歌浏览器插件扩展推荐列表

由于 Chrome 已经不允许用户安装非应用商店的第三方 .crx 扩展了,所以这里只提供了 Google Webstore 应用商店的官方下载地址.因为众所周知的原因,国内访问可能需要使用各种「番·羽·士·啬·工·具」才行,这里不多做讨论,大家各显神通吧…… Chrome App 浏览器应用: ARC Welder:谷歌官方推出的安卓模拟器,可以在 Win/Mac/Linux 的 Chrome 浏览器上运行安卓应用 Vysor:在电脑上通过 USB 数据线直接远程操作 Android 手机,并

【干货】Chrome插件(扩展)开发全攻略

[干货]Chrome插件(扩展)开发全攻略 http://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

AppCan Widget插件扩展机制

AppCan Widget插件扩展机制,通过AppCan平台生成的应用,可以理解为一个Widget包(即在IDE创建项目是看到的'phone'文件夹),和一个AppCan平台中间件组成的.通常的情况下,一个应用是由一个Widget+AppCan构成,那么,有没有可能说'n个Widget+AppCan'的机制呢,答应是肯定的,这就是Widget 插件机制,是针对主widget以及普通widget的一种增强性的扩展机制,可以将具有特定功能的widget封装成一个单独的widget包存放到plugin

前端开发推荐的火狐插件扩展

火狐好用的插件有很多,主要看你是做什么工作了,比如我是做网站前端的,有一些调试页面的插件就不可缺少了,如firebug.web developer等.秀一下我收藏的火狐插件,有些还是比较好用的,有一两个是必用的,之所以装的少,是因为怕装多了影响火狐运行速度.有图有真相:●.Firefox火狐常用附加组件集合(集荐:月光博客|360doc|) All-in-one sidebar:侧栏控制,率获大奖的用户体验! Firebug:为你的Firefox集成了浏览网页的同时随手可得的丰富开发工具. La

jquery 插件扩展2

jQuery autocomplete 自扩展插件.自动补全示例 jquery-lib版本是 1.3.2的,该插件是简单的扩展插件,代码也比较简单的封装.所以看起来也比较简单不是很费力,当然封装得也不是很好. 不过做了浏览器方面的兼容,经测试兼容IE6+.Firefox3.5+ 首先看看autocomplete.js: ;(function ($) { var index = -1; var timeId; var cssOptions = { "border": "1px

jquery 插件扩展

编写jquery扩展插件 第一步:创建一个js文件 第二步:编写有关代码 jQuery.fn.extend({    ///这个函数是全部选择所有的元素    check: function() {        return this.each(function() { this.checked = true; }); //必须return回一个jquery对象    },    uncheck: function() {        return this.each(function()