制作Qt Quick 2 Extension Plugin的几个问题-Qt

经过几天的google和爬帖,加上自己的摸索,终于把新版的Qt Quick 2制作插件的问题给弄了个明白,工作流可以建立了。几个让我费了很多力气的问题,在此记录一下。

我们最终的目标是实现插件在Qt Creator中的顺利载入,并能够实现代码补全。

Point 1.

Qt Quick 2 使用qmlsecene而不像第一代使用qmlviewer(我很喜欢!因为调试功能很全,而qmlsecene就是光杆一个),插件的编译类型要选择对应的MinGW+Release方式生成。

Point 2.

在项目文件(.pro)中修改,假设要载入的插件放在pro文件所在文件夹中的plugin文件夹下面,具体方法:

qmlproject:

importPaths: [ "./plugin" ]
c++ project:

QML_IMPORT_PATH = plugin

Point 3.

修改过后, 就要注意看自己创建插件时指定的uri了。譬如cn.iyinchao,就要将编译好的dll譬如叫plugin.dll连同qmldir文件一同复制到对应的plugin/cn/iyinchao/下面。这样,在Qt Creator中就可以使用
import cn.iyinchao 1.0

导入插件。并且运行成功。
Point 4.

但是,当我使用自定义类,姑且叫它MyItem,仍然无法代码补全,下面有红波浪线(程序猿最怕看到啦)。帖子爬啊爬,终于在官方文档中看到,使用qmlplugindump,生成插件的信息(.qmltypes)就可以让Qt Creator正确读取typeinfo信息并进行补全了。打开命令行,运行:
qmlplugindump.exe -notrelocatable [cn.iyinchao 1.0] [path/to/plugin] > [path/to/plugin/cn/iyinchao/Name.qmltypes]

执行完,就可生成qmltypes文件。编辑qmldir文件,加入
typeinfo Name.qmltypes

就可以让Qt Creator实现代码补全了。
-notrelocatable 这点很重要,不加的话生成的qmltypes文件在我这里无效(这个知识找的很辛苦啊)
Final.

至此,我们可以正确地导入插件,并且让Qt Creator对我们的插件进行代码提示了。

—————————————————————————————————-

EDIT:

发现qmlsecene可以打开一些debug模式的。参见qmlsecene的源代码

例如使用slowAnimation:

qmlscene.exe –slow-animations -I [path/to/your/plugin] [path/to/the/qml/file.qml]

为什么加入了-notrelocatable之后,qmltypes起作用了呢?打开文件,发现只有一处不同:

未加入:

exports: ["MyModule 1.0"]

加入后:

exports: ["cn.iyinchao/MyModule 1.0"]

估计是给出了uri,与import的uri相符,才找到了对应的对象MyModule。只是猜想

一个关于qml插件的文章-转的更多相关文章

  1. 自己diy一个jquery分页插件

    js基础学习过程中,期间经历换工作的各种面试,很多面试官问过:有没有写过jquery插件?等类似问题. 就个人而言,关于jquery插件的文章确实看过不少,但是一直没有动手写一个,一是不想在目前学习j ...

  2. 如何创建一个自定义jQuery插件

    简介 jQuery 库是专为加快 JavaScript 开发速度而设计的.通过简化编写 JavaScript 的方式,减少代码量.使用 jQuery 库时,您可能会发现您经常为一些常用函数重写相同的代 ...

  3. QML插件扩展(一)

    准备分两节来介绍QML扩展插件,分别为 (一)基于QML文件的扩展方式 (二)基于C++的插件扩展 这篇先介绍基于QML的插件扩展. 先介绍几个基本概念: qmldir: 用于组织自定义的QML插件, ...

  4. 图片延时加载原理 和 使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)

    图片加载技术分为:图片预加载和图片延时加载. javascript图片预加载和延时加载的区别主要体现在图片传输到客户端的时机上,都是为了提升用户体验的,延时加载又叫懒加载.两种技术的本质:两者的行为是 ...

  5. [IDEA插件] - 一个不错的插件

    今天看到微信平台一篇推送IDEA插件的文章继而下载了个插件看了下. 名字叫做codehelper.generator codehelper.generator http://plugins.jetbr ...

  6. 用javascript写一个emoji表情插件

    概述 以我们写的这个emoji插件为例,网上已经有一些相关的插件了,但你总感觉有些部分的需求不能被满足(如:可以自行添加新的表情包而不用去改源代码等等) 详细 代码下载:http://www.demo ...

  7. caddy & grpc(3) 为 caddy 添加一个 反向代理插件

    caddy-grpc 为 caddy 添加一个 反向代理插件 项目地址:https://github.com/yhyddr/caddy-grpc 前言 上一次我们学习了如何在 Caddy 中扩展自己想 ...

  8. 如何编写一个WebPack的插件原理及实践

    _ 阅读目录 一:webpack插件的基本原理 二:理解 Compiler对象 和 Compilation 对象 三:插件中常用的API 四:编写插件实战 回到顶部 一:webpack插件的基本原理 ...

  9. 做了一个sublime text插件

    做了一个sublime text插件,可以方便地查看C++/python的调用图.插件的演示视频在这里: http://list.youku.com/albumlist/show?id=2820226 ...

随机推荐

  1. elcipse 中利用maven创建web工程

    如何创建: http://huxiaoheihei.iteye.com/blog/1766986 遇到的问题: 1: 如果spring MVC配置了 <servlet> <servl ...

  2. centos中更换jdk的版本

    现在讲的是Linux中更换jdk版本的问题,卸载Linux自带的jdk更换sun的jdk百度一大堆,但是如果我安装的sun的jdk是1.7的想更换到1.8的如何解决呢,方法其实超easy. 把1.8的 ...

  3. iOS - OC NSTimeZone 时区

    前言 @interface NSTimeZone : NSObject <NSCopying, NSSecureCoding> NSTimeZone 表示时区信息. 1.NSTimeZon ...

  4. (一)解决Sublime Text 2中文显示乱码问题

    欲解决问题,关键在于让Sublime Text 2支持GB2312和GBK.步骤如下: 1.安装Sublime Package Control.   在Sublime Text 2上用Ctrl+-打开 ...

  5. 在Linux下运行C语言程序

    市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境和各种常用的必备工具,国内使用较多的是Ubuntu(乌班图).CentOS.Deepin(深度Linux).本教 ...

  6. WCF配置详解

    前面一篇文章<WCF 学习总结1 -- 简单实例> 一股脑儿展示了几种WCF部署方式,其中配置文件(App.config/Web.config)都是IDE自动生成,省去了我们不少功夫.现在 ...

  7. 通过yum安装nginx-mysql-php-fastcgi配置LNMP

    最近指想服务器跑静态文件,所以想单独配置个nginx的webserver,然而并不是我想象的那么简单,使用rpm包来安装会发生很多软件依赖的错误: 当我尝试使用yum安装nginx的时候,总是提示未找 ...

  8. css3开门

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. Linux下如何查看自己的服务器有没有无线网卡

    还是实验室那台破服务器,连不上网.有没有界面,所以想着如何用一些命令来链接上热点. 当然,在linux下链接wifi没有win下那么一点就好了! 首先我们需要的基本条件就是: 服务器上有无线网卡.[r ...

  10. Java学习之约瑟夫环的两中处理方法

    package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...