• qml入门教程:qml的初步使用



    QML介绍

    QML 是一种用户界面规范和编程语言。它允许开发人员和设计师创建高性能、流畅的动画和视觉吸引人的应用程序。 QML 提供了一种高度可读、声明性、类似
    JSON 的语法,支持与动态属性绑定相结合的命令式 JavaScript 表达式。 QML 全称:Qt Meta Language 或 Qt
    Modelling Language,主要包含以下特征: 像脚本语言一样定义界面的元素

    1.是对 ECMAScript 标准的扩展.(参见:JavaScript)
    2.提供了建立一颗 QML 元素对象树的机制 ,支持 QML 元素和基于 QObject 的 C++ 对象之间的交互 QML 包含了一套 QML 元素 图形的和行为的基础组成部分.
    3.可以通过 QML 文档来建立更加复杂的元件和 QML 应用.


    文件结构

    一个qml文件结构分主要由三部分组成:import声明、对象树和注释。

    import语句

    这个就像C++中的头文件,一个QML文件在文件顶部可能含有一个或多个import.
    一个import声明可能为以下几种类型:

    • 注册的是哪个版本的命名空间。
    • a relative directory which contains type-definitions as QML documents
    • 一个JavaScript文件
      JavaScript file imports must be qualified when imported, so that the properties and methods they provide can be accessed.

    import几种声明形式:

    import Namespace VersionMajor.VersionMinor 
    import Namespace VersionMajor.VersionMinor as SingletonTypeIdentifier 
    import “directory” 
    import “file.js” as ScriptIdentifier
    
    • 1
    • 2
    • 3
    • 4

    QML对象树

    根对象是Window, 然后可以在Window中添加各种控件,例如按钮,文本,菜单等

    对象的几个常用属性

    元素id属性

    QML 元素可以有一个id属性,作为该元素的名字。以后我们可以直接用这个名字指代该元素,相当于该元素的指针。

    • QML对象的id属性是唯一的,不同对象的id属性值不能相同,我们可通过某个对象的id属性来访问这个对象。
    • 属性是QML语言内建的一个属性,在对象实例化完成后其值是不能被修改的,不同于其它的普通属性。
    • id属性值必须以小写字母或下划线开头,且不能包含字母、数字、下划线以外的其它字符.

    自定义属性

    property 是QML自定义属性修饰符。
    声明:
    [default] [required] [readonly] property <propertyType> <propertyName> [ : <value> ]
    default、required 和 readonly 关键字是可选的,用于修改所声明属性的语义.

    • 属性名称必须以小写字母开头,并且只能包含字母、数字和下划线。
    • 声明自定义属性隐式地为该属性创建一个值更改信号,以及一个名为 onChanged 的​​关联信号处理程序,其中 是属性的名称,首字母大写.
    • 除了枚举类型之外的任何 QML 基本类型都可以用作自定义属性类型(枚举值只是整数值,可以用 int 类型代替).
    • 属性是类型安全的,只能为属性分配与属性类型匹配的值,否则会出错.

    只读属性

    对象声明可以使用 readonly 关键字定义只读属性,语法如下:
    readonly property <propertyType> <propertyName> : <initialValue>

    • 只读属性必须初始化,且不能修改,也不能是default属性和alias属性.

    默认属性

    一个对象定义可以有一个默认属性。使用可选的 default 关键字声明属性将其标记为默认属性。
    任何基于Item的类型都有一个data列表属性,这个属性就是该类型的默认属性,保存了所有的孩子对象,其中可视的孩子对象又保存在了children列表属性中,不可视的孩子对象保存在了resources列表属性中,在添加子对象时children、resources属性可写可不写,都会自动添加到对应的属性列表中.QML 对象中.

    • 所有的 QML 实体对象都会默认归属到一个链表属性中,并且建立起父子关系(QtObject 除外,Item 及其 C++ 派生类有效,在 QML 中重新设定默认属性的无效)。
    • QML 中自定义默认链表属性( default property list<T> defaultProperies),不会与实例化后的内部对象实体建立起父子关系,只能手动设置父子关系。更多看查看Qt默认属性扩展

    属性别名

    属性别名引用其它的属性,语法如下:
    [default] property alias <name>: <alias reference>
    name是我们自定以的属性名,alias reference是属性别名所引用的那个属性或对象,也就是说属性别名可以引用自一个单一的属性,也可以引用自一个复杂的对象。
    属性绑定是动态的,但不是双向的,而通过属性别名可达到动态、双向的效果,即修改name和aliasreference中任一个的值,与之关联的另一个属性值也会随之改变.

    属性别名限制
    • 只能引用在声明别名的类型范围内的对象或对象的属性。
    • 它不能包含任意的 JavaScript 表达式。
    • 它不能引用在其类型范围之外声明的对象。
    • 它在首次声明别名时必须提供别名引用。
    • 它不能引用附加属性。
    • 它不能引用深度为 3 或更大的层次结构内的属性。
    属性别名注意点
    • 如果属性别名与已有的属性名相同,就会把已有的属性 覆盖掉。
    • 不能在对alias属性继续alias。
    • 在整个组件初始化完毕之后才可以使用。

    列表属性

    定义对象列表值的语法是用方括号括起来的逗号分隔列表,语法如下:
    [ <item 1>, <item 2>, ... ]

    • 可以使用以下语法在对象声明中指定列表类型属性:
      [default] property list<<objectType>> propertyName.
    • 如果列表包含单个项目,则可以省略方括号.

    分组属性

    在某些情况下,属性包含子属性属性的逻辑组。 可以使用点表示法或组表示法来分配这些子属性属性。

    
    Text {
      //点表示法
      font.pixelSize: 12
     font.bold : true }   Text {
    //组表示法
    font { pixelSize: 12; bold : true } }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    
    ___
    
    • 1
    • 2
  • 相关阅读:
    Linux 基础-新手必备命令
    技术分享|新代币标准的讨论
    git全局设置账号及ssh连接公私钥获取
    mongoDB的三种基础备份方法
    万物生长大会 | 创邻科技再登杭州准独角兽榜单
    如何将ecology本地域名变成公网域名?
    【STL】容器遍历:std::for_each例子
    JMeter笔记7 | JMeter脚本回放
    HarmonyOS NEXT应用开发—状态栏显隐变化
    Linux 创建目录
  • 原文地址:https://blog.csdn.net/qq_21438461/article/details/125430230