Qt QML 模块化管理(三)—— qmldir的化繁为简


所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧!

QML其它文章请点击这里:     QT QUICK QML 学习笔记


姊妹篇:

qmldir实例——QGC地面站中手把手教你添加qmldir模块文件

QT QML 模块化管理(一)——添加工程组(文件组)

QT QML 模块化管理(二)——前缀(Prefix)和别名管理


当然仅用别名相对路径的管理是不够的,当项目越大的时候,就得看qmldir的管理管理了,具体使用流程如下:

1. qmldir模块化管理流程

1.1 添加qmldir文件

添加空文本,并命名为qmldir。
在这里插入图片描述
其中路径相当重要,如上qmldir的父目录为QmlTest1,那么qmldir的模块名必须为QmlTest1,这是经过了多次测试得出来的惨痛教训。

1.2 修改qmldir文件

具体格式和说明可搜官方帮助文档: Module Definition qmldir Files
这里只介绍最简单的形式(能用就好)

Module QmlTest1 #声明模块的模块标识符,必须与模块的安装路径匹配,必须是文件的第一行

#依次为类型名称 | 类型的模块版本 | QML文件名(这里还有可选参数[singleton]用于声明单例类型)
Qml11           1.0           Qml11.qml
Qml13           1.0           Qml13.qml

1.3 pro文件导入QML模块的路径

打开工程文件pro1.pro 并修改如下:

# QML_IMPORT_PATH =
#修改为
QML_IMPORT_PATH += $$PWD

能正常运行,但是有显示错误,如下:(pro1.pro 中不做任何修改也能正常运行,也会报显示错误)
在这里插入图片描述
添加路径为 $$PWD/qmldir,不会有显示错误

QML_IMPORT_PATH += $$PWD/qmldir

1.4 main.cpp导入安装模块路径

在main.cpp中增加红色框语句即可
在这里插入图片描述

engine.addImportPath(QStringLiteral("qrc:/"));

1.5 修改文件别名

在这里插入图片描述

注意:
① 经测试不管qmldir在实际文件中是否和qml文件处于同一文件夹下,都需要修改别名使得在同一层文件夹下
② 如果qmldir和qml在实际文件中不在同一目录下,组件调用的时候会索引不到,建议qmldir和qml放入同一目录下如QmlTest2

1.6 模块使用

只需导入模块,然后调用文件名就好

...
import QmlTest1 1.0
import QmlTest2 1.0

Window {
	...
	Qml11 {
	    anchors.horizontalCenter:   parent.horizontalCenter
	}
	Qml13 {
	    anchors.horizontalCenter:   parent.horizontalCenter
	}
}

2. 源码和运行结果

测试代码如下:

//Qml11.qml
import QtQuick 2.0

Text {
    text: qsTr("Text11")
}
import QtQuick 2.12
import QtQuick.Window 2.12

import QmlTest1 1.0
import QmlTest2 1.0

Window {
    visible: true
    width: 250
    height: 250
    title: qsTr("Image")

    Column {
        spacing:  10
        anchors.fill:       parent

        Text {
            text: qsTr("--------------Text Test--------------")
            anchors.horizontalCenter:   parent.horizontalCenter
        }
        //可以直接调用,因为同文件级别
        Qml1 {
            anchors.horizontalCenter:   parent.horizontalCenter
        }
        //导入的 QmlTest1模块中
        Qml11 {
            anchors.horizontalCenter:   parent.horizontalCenter
        }
        //导入的 QmlTest1模块中
        Qml13 {
            anchors.horizontalCenter:   parent.horizontalCenter
        }
        //导入的 QmlTest2模块中
        Qml21 {
            anchors.horizontalCenter:   parent.horizontalCenter
        }
    }
}

运行如下:
在这里插入图片描述
【参考】 【原创】qmldir模块化管理qml资源


QML其它文章请点击这里:     QT QUICK QML 学习笔记


姊妹篇:

qmldir实例——QGC地面站中手把手教你添加qmldir模块文件

QT QML 模块化管理(一)——添加工程组(文件组)

QT QML 模块化管理(二)——前缀(Prefix)和别名管理

  • 31
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值