• 模块化开发之一:QML文档路径导入


    模块化开发之一:QML文档路径导入

    QML文件的本地路径可以被导入,而不需要任何额外的安装和配置。远程的QML文件路径也可以被导入,但必须要有一个路径列表类型的qmldir文件。本地路径也可以有一个路径列表类型的qmldir文件,以便于定义类型名称,当客户端导入这些路径时,可以获得这些类型,也可以导入客户端所需要的,在qmldir中指定的JavaScript资源。

    本地路径导入

    本地文件系统中的任何QML文件都可以使用import声名,来导入一个绝对或相对文件路径,使得定义在路径中所含文件的对象类型可用。
    如果本地文件夹中含有一个路径列表类型的qmldir文件,qmldir中指定的类型名称就可用,否则,就会用QML文件名作为类型的名字。如果文件夹中没有qmldir,则只有以大写字母开头且以".qml"为后辍的QML文件的文件名会被暴露为对象类型。

    举个粟子

    假定有以下QML项目的文件结构。在顶层文件夹myapp下,名为mycomponents子文件夹中有一系列通用UI组件,在名为main的子文件夹里有主程序的代码,如下:

    myapp
        |- mycomponents
            |- CheckBox.qml
            |- DialogBox.qml
            |- Slider.qml
        |- main
            |- application.qml

    文件main/application.qml可以以相对文件路径来导入mycomponents这个文件路径,以使得其中定义的QML 对象类型可用。

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

    路径也可能被导入为标准的本地命名空间,使用该路径下的任何类型都必段使用命名空间前辍:

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

    导入本地路径,对于导入程序内组件集和程序原型组件很方便,虽然在组件路径发生任何变更时,都需要更改用到这些组件的代码的导入声明。但这可以通过应用 QML模块来避免。因为相对比文件路径,安装的模块有唯一字符标识。

    远程路径

    如果远程路径中含有一个路径列表类型的qmldir文件,QML文件的路径也可以从远程导入。
    比如,如果上例中的myapp路径被部署在 "http://www.my-example-server.com" ,并且mycomponents路径中包含如下定义的一个qmldir文件:

    CheckBox CheckBox.qml
    DialogBox DialogBox.qml
    Slider Slider.qml

    那么,可以使用路径mycomponents的远程URL来导入路径:

    import "http://www.my-example-server.com/myapp/mycomponents"
    
    DialogBox {
        CheckBox {
            // ...
        }
        Slider {
            // ...
        }
    }

    注意,当通过网络来导入文件夹路径时,只能访问路径中qmldir文件所定义的QML和JavaScript。

    警告:当导入远程服务器上的文件夹路径时,开发者应该时刻注意,仅加载那些可信资源,以避免加载有害代码。

    路径列表类型的qmldir文件

    路径列表类型的qmldir文件不同于模块定义类型的qmldir文件。前者允许一组QML文件快速和容易被分享,但它并未为这些即将注册的QML对象类型定义命名空间,也不支持这些QML对象的版本定义。
    路径列表类型的qmldir文件的语法如下:

    命令语法说明
    Object Type Declaration <TypeName> <FileName> An object type declaration allows a QML document to be exposed with the given .
    Example:
    <br/>RoundedButton RoundedBtn.qml<br/>
    Internal Object Type Declaration internal <TypeName> <FileName> An internal object type declaration allows a QML document to be registered as a type which becomes available only to the other QML documents contained in the directory import. The internal type will not be made available to clients who import the directory.
    Example:
    <br/>internal HighlightedButton HighlightedBtn.qml<br/>
    JavaScript Resource Declaration <Identifier> <FileName> A JavaScript resource declaration allows a JavaScript file to be exposed via the given identifier.
    Example:
    <br/>MathFunctions mathfuncs.js<br/>

    本地文件路径中也可以包含(也可以不包含)一个qmldir文件。这能够让引擎仅暴露特定QML类型给导入路径的clients。而且,如果不在qmldir中明确声明JavaScript资源,则也不会被暴露给clients。

  • 相关阅读:
    ZTree id值太大,ZTree没有生成树,ZTree的id值过大
    Spring NamedParameterJdbcTemplate命名参数查询条件封装, NamedParameterJdbcTemplate查询封装
    Linux Redis 重启数据丢失解决方案,Linux重启后Redis数据丢失解决方
    Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动
    Linux Redis安装,Linux如何安装Redis,Linux Redis自动启动,Redis开机启动
    springJdbc in 查询,Spring namedParameterJdbcTemplate in查询
    Sublime的插件Color Highlighter的安装方法
    Sublime的Package Control安装方法
    JavaScript实现最简单的拖拽效果
    css抠图之background-position-背景定位
  • 原文地址:https://www.cnblogs.com/sammy621/p/16200443.html
Copyright © 2020-2023  润新知