QML自定义模块及qmldir的使用

news2025/1/20 1:43:25

前言

在开发QtQuick项目中,当项目文件很多的情况下,可能会分成多级文件夹来进行分类,还有一些通用类型文件,如公共组件,通用配置等等,需要在各个不同的文件中进行调用,这种情况下,一种方式是在当前需要引用的文件中通过关键字import 加上相对路径,从而找到通用文件目录。另一种方式就是将通用文件目录设置成qml模块形式,通过import直接引入模块名称就可以直接调用相关qml了,这样的好处是在任何不同的目录中都可以随处导入模块,而不用考虑相对路径的问题。

这里要介绍的就是如何在qml项目中定义模块,针对大型项目中使用尤其方便。

正文

首先,模块的使用需要一个qmldir文件,这是一个纯文本文件(没有后缀),用来定义qml模块

文件格式:

module 模块名称       #声明模块的模块标识符,必须与模块的安装路径匹配,必须是文件的第一行
#依次为类型名称 | 类型的模块版本 | QML文件名(这里还有可选参数[singleton]用于声明单例类型)
singleton  模块  版本  qml文件
 
比如:
module Component   #声明模块的模块标识符
singleton Config 1.0 Config.qml
CusButton 1.0 CusButton.qml
...

注意:这里可以通过singleton来声明是否为单例类型,QML中的单例通常用在通用配置文件中。

下面来看示例:
创建一个演示demo
在这里插入图片描述
为方便演示,这里特意创建了多级文件夹,Component目录是我们设置的模块,包含的是一些自定义控件封装,以及通用配置文件,在模块目录中添加一个qmldir文件,qmldir内容如下:

module Component
singleton Config 1.0 Config.qml
CusButton 1.0 CusButton.qml
CusText 1.0 CusText.qml

接下来重要步骤,在pro文件中添加

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH = $$PWD/

注意 这里的路径要指到模块文件夹的上一级目录,由于演示demo的模块文件夹Component和工程文件pro是同一个目录,所以这里QML_IMPORT_PATH 就设置路径为当前路径即可。

然后在main文件中,找到engin定义的地方,添加设置addImportPath

engine.addImportPath("qrc:/");

这里qrc路径同样是要指到模块文件夹的上一级目录。

ok,接下来看看如何使用:
在任意目录的文件中如果需要引用模块内的文件,可以直接导入模块名 import Component 1.0

import QtQuick 2.0
import Component 1.0

Rectangle {

    color: Config.subClr

    CusButton{
        //...
    }
}

由于Config文件设置的是单例,所以可以直接通过文件名来引用其中的属性,如:Config.subClr

Config文件内容如下,单例设置需要在文件最前面添加 pragma Singleton来进行声明:

pragma Singleton

import QtQuick 2.13
import QtQml 2.13

QtObject {

    readonly property color mainClr: "#AAAAAA"
    readonly property color subClr: "#666666"
    //....
}

ok,通过以上方式定义模块来使用,在大型项目中非常常见,QML官方的很多demo中也是这样使用,对于不同层级QML文件相互引用非常方便。最关键步骤就是在pro中添加定义以及在engine设置addImportPath路径。

演示demo下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

04、Cadence使用记录之器件连接的连线、网络、总线、差分(OrCAD Capture CIS)

04、Cadence使用记录之器件连接的连线、页内网络、总线、跨页网络、差分、电源(OrCAD Capture CIS原理图) 前置教程: 01、Cadence使用记录之新建工程与基础操作(原理图绘制:OrCAD Capture CIS) 02、Cadenc…

操作系统原理 —— 操作系统的四个特征:并发、共享、虚拟、异步 (二)

本章我们来聊一下操作系统的四个特征 在我们的操作系统中有四个特征:并发、共享、虚拟、异步,我们结合每一个特征来进行讲解,我们先来看并发。 并发 这里所说的并发,最好不联想到并发编程。咱们就简简单单理解一下,…

浙工商机器学习课程论文+代码分享(含数据集)

文章目录 一、论文总览二、摘要 & 目录三、数据集的展示四、部分代码4.1 降低内存4.2 部分特征生成4.3 热力图分析4.4 变量分布图4.5 聚类算法4.6 聚类结果的展示(部分)4.7 聚类后的特征图 完整版的论文代码数据集地址: https://mbd.pub…

leetcode刷题(7)二叉树(1)

哈喽大家好,这是我leetcode刷题的第七篇,这两天我将更新leetcode上关于二叉树方面的题目,如果大家对这方面感兴趣的话,欢迎大家持续关注,谢谢大家。 那么我们就进入今天的主题。 文章目录 1.二叉树的前序遍历题目要求示…

优先级队列

目录 前言: 1、PriorityQueue的特性 .2 PriorityQueue常用接口介绍 Ⅰ、PriorityQueue常见的构造方法 Ⅱ、常用的方法 Ⅲ、PriorityQueue的扩容方式: 3、应用 前言: 普通的队列是一种 先进先出的数据结构,元素在队列尾追加&am…

RC专题:无源滤波电路和有源滤波电路

什么是无源滤波电路和有源滤波电路 仅由无源器件(电阻、电容、电感)构成的滤波电路 称为无源滤波电路。如下图所示。 由无源器件和有源器件(双极型管,单极型管,集成运放)构成的滤波电路 称为有源滤波电路。…

什么是爬虫?

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟…

2023第十三届MathorCup高校数学建模挑战赛C题解析

2023第十三届MathorCup高校数学建模挑战赛C题解析 题目解析前言题目一题目二题目三题目四 题目 C 题 电商物流网络包裹应急调运与结构优化问题 电商物流网络由物流场地(接货仓、分拣中心、营业部等)和物流场地之间的运输线路组成,如图 1 所示…

LeetCode:1. 两数之和——哈希表~

🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 一、🌱1. 两数之和 题目描述:给定一个整数数组nums 和一个整数目…

QT 插件通信接口调用 CTK开发(四)

CTK 为支持生物医学图像计算的公共开发包,其全称为 Common Toolkit。为医学成像提供一组统一的基本功能;促进代码和数据的交互及结合;避免重复开发;在工具包(医学成像)范围内不断扩展到新任务,而不会增加现有任务的负担;整合并适应成功的解决方案。 本专栏文章较为全面…

leetcode python刷题记录(十)(91~100)

leetcode python刷题记录(十)(91~100) 91. 解码方法 class Solution:def numDecodings(self, s: str) -> int:if not s or s[0]0:return 0nlen(s)dp[0]*(n1)dp[0]1dp[1]1for i in range(1,n):if s[i]0:if s[i-1]1 or s[i-1]2:…

【算法系列之二叉树I】leetcode226.翻转二叉树

非递归实现前序遍历 力扣题目链接 解决思路 前序遍历&#xff0c;中左右。先放右节点&#xff0c;后放左节点。 Java实现 class Solution {public List<Integer> preorderTraversal(TreeNode root) {//中左右Stack<TreeNode> stack new Stack<>();List…

蓝桥杯:人物相关性分析

蓝桥杯&#xff1a;人物相关性分析https://www.lanqiao.cn/problems/198/learning/ 目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 输入 输出 运行限制 题目分析:(滑动窗口) AC代码&#xff08;JAVA&#xff09; 题目描述 小明正在分析一本小说中…

【ChatGPT】无需魔法打开即用的 AI 工具集锦

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

原理+配置+实战,Canal一套带走

前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——Canal。在了解了它的工作原理和使用场景后&#xff0c;顿时产生了浓厚的兴趣。今天&#xff0c;就让我们跟随阿Q的脚步&#xff0c;一起来揭开它神秘的面纱吧。 简介 canal 翻译为管道&#xff0c;主要用途是基于 M…

【设计】【Redis】分布式限流与算法实现

目录 前言实现application.propertiesconfig.RedisConfigMainApplicationcontroller.TrafficLimitControlleraop.AccessLimiterAspectaop.annotation.AccessLimiter 项目结构运行限流脚本计数器滑动窗口令牌桶漏桶 参考资料 前言 服务的某些场景可能会出现短时间内的巨大访问流…

【C语言进阶:动态内存管理】柔性数组

本节重点内容&#xff1a; 柔性数组的特点柔性数组的使用柔性数组的优势 ⚡柔性数组 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。C99 中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c…

java+ssm 社区超市网上商城果蔬(水果蔬菜)管理系统

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括超市果蔬管理系统的网络应用&#xff0c;在外国超市果蔬管理系统已经是很普遍的方式&#xff0c;不过国内的超市果蔬管理系统可能还处于起步阶段。超市果蔬管理系统具有果蔬管…

Flutter系列(八)搜索框详解

底部导航顶部导航图片列表的完整代码 Flutter系列&#xff08;四&#xff09;底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 目录 一、前言 二、搜索框实现方案 三、完整工程代码 1. 自定义的搜索框组件SearchAppBar search.dart 2. 搜索详情页 search…

Java岗五面阿里,终拿offer,原来面试官总喜欢问这些问题

一面 一面就做了一道算法题&#xff0c;要求两小时内完成&#xff0c;给了长度为N的有重复元素的数组&#xff0c;要求输出第10大的数。典型的TopK问题&#xff0c;快排算法搞定。 算法题要注意的是合法性校验、边界条件以及异常的处理。另外&#xff0c;如果要写测试用例&am…