制作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. C++大数类模板

    友情提示:使用该模板的注意了,在大数减法里有一个小错误,导致减法可能会出错 // 原来的写法,将t1.len错写成了len ] == && t1.len > ) { t1.len ...

  2. 关于Java控制台输入输出乱码问题

    产生原因:因为这个开源项目的默认字符编码为UTF-8,所以我的控制台的字符编码也自动变成了UTF-8,而键盘的输入流的默认格式是GBK格式,这样就造成了在GBK转UTF-8的过程中产生的奇数乱码错误( ...

  3. Android_相关路径

    1. Android应用安装涉及到如下几个目录:system/app   系统自带的应用程序,无法删除.data/app      用户程序安装的目录,有删除权限.安装时把apk文件复制到此目录.da ...

  4. linux虚拟机安装

    1.真实机第一次安装必须先搞f2进入boot从光盘启动,虚拟机不用 进入的时候五个选项Install or upgrade an existing system:安装或升级现有系统Install sy ...

  5. 下载安装APK

    protected void downloadApk() { //apk下载链接地址,放置apk的所在路径 //1,判断sd卡是否可用,是否挂在上 if(Environment.getExternal ...

  6. git123

    一:安装git和配置 1.下载 Git for windows,双击开始安装,一路采取默认选项,一路next,即可安装完毕.为了在你的电脑和github之间建立安全连接,需要SSH keys,所以你需 ...

  7. 项目中的五级地址联动效果(js)

    我刚开始是的时候是是写了一个sql语句,但是写了5个函数,来联动地址的.后来请教了前段的师傅,用js来写了一个地址联动的. 我使用的是easyui的框架! 地址联动部分html代码! <tr&g ...

  8. 七大查找算法(附C语言代码实现)

    来自:Poll的笔记 - 博客园 链接:http://www.cnblogs.com/maybe2030/p/4715035.html 阅读目录 1.顺序查找 2.二分查找 3.插值查找 4.斐波那契 ...

  9. MFC Socket

    目录 第1章同步TCP通讯    1 1.1 同步通讯与异步通讯    1 1.2 同步通讯类    1 1.3 同步TCP通讯客户端    4 1.3.1 界面    4 1.3.2 界面类声明   ...

  10. 在腾讯云上创建您的SQL Cluster(3)

    版权声明:本文由李斯达原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/250 来源:腾云阁 https://www.qclo ...