当前位置: 首页 > news >正文

【QML】 如何导入QML文档目录

在QML工程中,本地目录中的QML文件可以在不需要附加设置或配置的情况下导入。一个本地目录中可能包含一个目录清单qmldir文件,用于定义提供的类型名,并指定提供给导入目录时可用的JavaScript资源。

本地文件系统上的所有QML文件都可以使用绝对或相对路径的导入,导入时使用:

import "目录名称”

语句来完成。

从而使我们能使用该目录中定义的对象类型。

很多情况下,如果本地目录中包含一个qmldir文件,这些类型将通过qmldir文件中指定的类型名引用;否则,它们将与从QML文档的文件名派生的类型名一起使用。如果目录中没有指定qmldir文件,qml文件将作为公开类型使用。

一个示例

例如以下QML项目目录结构。在顶层目录myapp下,有一个名为mycomponents的子目录中有一组常见的UI组件,而主应用程序代码文件位于名为main的子目录中,如下所示:

在main/application.qml文件中可以使用mycomponents目录的相对路径导入mycomponents目录,从而允许在application.qml文件中使用mycomponents目录中定义的QML对象类型,如下代码:

import "../mycomponents"
DialogBox {
    CheckBox {
    }
    Slider {
    }
}

因为main和mycomponents是同级目录,上述代码是application.qml文件中的内容,所以在使用import导入时,使用的是:../mycomponents,回到application.qml文件的上一级目录。

当然,我们还可以为导入的目录取一个别名(即本地命名空间),在这种情况下,我们需要使用限定的命名空间名称去使用目录中提供的类型,不能直接使用。例如下列代码:

import "../mycomponents" as MyComponents
MyComponents.DialogBox {
// ...
}

对于应用程序内组件集和应用程序原型,导入本地目录在实际开发中非常方便。但是如果模块目录移动到了另一个位置,所有与导入此模块的代码(与导入相关的语句)都必须更新。如果使用QML模块方式导入,则可以避免出现这种情况,因为该种方式将使用唯一标识符字符串导入已安装的模块,而不是使用文件系统的路径,所以当目录移动了位置,qml文件中与导入相关的代码也不会受到任何影响。以模块方法导入参见这篇文章《如何创建一个QML模块》

『注意』这里MyComponents必须是以大写字母开头的命名空间,才能引入正确的类型对象。

备注

在QtCreator中,如果导入语句语法和用法都正常,且能正常启动运行qml程序,但是在代码编辑器中依然会报:**QT Unknown component(M300)**错误。

这是因为QtCreator的代码模型没有重置更新。可按照下列步骤解决:

依次点击:工具–> QML/JS–> 重置代码模型,重置更新一下代码模型即可解决。

相关文章:

  • 【前端】命令行基础,linux常用命令
  • 【ZYNQ-嵌入式】zynq学习笔记(二)—— GIPO的硬件配置和软件配置
  • vue echarts 镂空饼图配置
  • 项目二:《贪吃蛇》
  • 企业运维容器之 docker仓库
  • 快速排序sort 第k个数
  • uniapp开发微信小程序Error in onLoad hook: “SyntaxError: Unexpected end of JSON input“
  • MySQL当前链接状态查询
  • 打破平台限制,小程序如何在硬件设备上运行?
  • ORA-01017(:用户名/口令无效; 登录被拒绝)Oracle新建用户并授权
  • PostgreSQL的学习心得和知识总结(九十九)|语法级自上而下完美实现达梦数据库的 TOP语法功能 的实现方案
  • Mybatis-Plus批量插入应该怎么用
  • (Note)C++中的继承方式
  • qemu gutest network configuration
  • 【25】 冒险和预测(四):今天下雨了,明天还会下雨么?
  • 4个实用的微服务测试策略
  • conda常用的命令
  • ES6语法详解(一)
  • JavaScript实现分页效果
  • Python利用正则抓取网页内容保存到本地
  • Redash本地开发环境搭建
  • Redis 中的布隆过滤器
  • REST架构的思考
  • SpiderData 2019年2月23日 DApp数据排行榜
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vultr 教程目录
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 开源SQL-on-Hadoop系统一览
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 排序(1):冒泡排序
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 用jQuery怎么做到前后端分离
  • 用Visual Studio开发以太坊智能合约
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​决定德拉瓦州地区版图的关键历史事件
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • ()、[]、{}、(())、[[]]命令替换
  • (NSDate) 时间 (time )比较
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)jdk与jre的区别
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 药厂业务系统 CPU爆高分析
  • .NET连接MongoDB数据库实例教程
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • @font-face 用字体画图标
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [ComfyUI进阶教程] animatediff视频提示词书写要点