余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

QML参考指南01:QML语法基础

xiyangw 2022-11-26 16:39 15 浏览 0 评论

QML是一种多范式语言,使您可以根据对象的属性以及它们如何关联和响应其他对象的更改来定义对象。与纯命令式代码相反,在该命令式代码中,属性和行为的更改是通过一系列逐步处理的语句表示的,而QML的声明性语法将属性和行为的更改直接集成到单个对象的定义中。然后,在需要复杂的自定义应用程序行为的情况下,这些属性定义可以包括命令性代码。

引擎通常通过QML 文档(它们是QML代码的独立文档)加载QML源代码。这些可以用来定义QML对象类型,然后可以在整个应用程序中重用它们。请注意,类型名称必须以大写字母开头,以便在QML文件中声明为QML对象类型。

Import 声明

一个QML文档可能在文件顶部具有一个或多个导入。导入可以是以下任意一项:

· 已注册类型的版本化名称空间(例如,通过插件)

· 包含类型定义作为QML文档的关联目录

· 一个JavaScript文件

导入JavaScript文件时,必须对其进行限定,以便可以访问它们提供的属性和方法。

各种import的通用形式如下:

import Namespace VersionMajor.VersionMinor

import Namespace VersionMajor.VersionMinor as SingletonTypeIdentifier

import "directory"

import "file.js" as ScriptIdentifier

例子:

import QtQuick 2.0

import QtQuick.LocalStorage 2.0 as Database

import "../privateComponents"

import "somefile.js" as Script

对象声明

语法上,一块QML代码定义了要创建的QML对象树。使用对象声明定义对象,这些声明描述了要创建的对象的类型以及要赋予该对象的属性。每个对象还可以使用嵌套对象声明来声明子对象。

对象声明由其对象类型的名称组成,后跟一组花括号。然后,在这些花括号内声明所有属性和子对象。

这是一个简单的对象声明:

Rectangle {
      width: 100
    height: 10
  color: "red"
  }

这将声明一个Rectangle类型的对象,然后是一组花括号,其中包含为该对象定义的属性。Rectangle类型是类型由提供QtQuick模块,在这种情况下定义的属性是矩形的的值width,height和color特性。(这些属性由Rectangle类型提供,如Rectangle文档中所述。)

如果上述对象是QML文档的一部分,则可以由引擎加载。也就是说,如果源代码补充有导入QtQuick模块的import语句(以使Rectangle类型可用),如下所示:

import QtQuick 2.0
Rectangle {
      width: 100
      height: 100
      color: "red"
  }

当放入.qml文件并由QML引擎加载时,以上代码使用模块提供的Rectangle类型创建Rectangle对象:QtQuick

注意:如果对象定义仅具有少量属性,则可以将其写在这样的一行上,并用分号分隔属性:

Rectangle{ width: 100; height: 100; color: "red" }

显然,此示例中声明的Rectangle对象确实非常简单,因为它仅定义了几个属性值。为了创建更多有用的对象,对象声明可以定义许多其他类型的属性:QML对象属性文档中讨论了这些属性。此外,对象声明可以定义子对象,如下所述。

子对象

任何对象声明都可以通过嵌套对象声明来定义子对象。这样,任何对象声明都会隐式声明一个对象树,其中可能包含任意数量的子对象。

例如,下面的Rectangle对象声明包含一个Gradient对象声明,而该对象又包含两个GradientStop声明:

import QtQuick 2.0
Rectangle {
      width: 100
      height: 100
      gradient: Gradient {
             GradientStop { position: 0.0; color: "yellow" }
           GradientStop { position: 1.0; color: "green" }
            }
  }

当引擎加载此代码时,它将创建一个对象树,其根为Rectangle对象。该对象具有一个Gradient子对象,而该对象又具有两个GradientStop子对象。

但是请注意,这是在QML对象树的上下文中的父子关系,而不是在视觉场景的上下文中。视觉场景中父子关系的概念由模块中的Item类型提供QtQuick,这是大多数QML类型的基本类型,因为大多数QML对象都旨在可视化呈现。例如,Rectangle和Text都是基于Item的类型,下面,一个Text对象已声明为Rectangle对象的可视子对象:

import QtQuick 2.0
Rectangle {
width: 200
height: 200
color: "red"
Text {
anchors.centerIn: parent
text: "Hello, QML!"
}
}

当上面的代码中Text对象引用其父级值时,它是引用其可视父级,而不是对象树中的父级。在这种情况下,它们是相同的:在QML对象树的上下文以及视觉场景的上下文中,Rectangle对象都是Text对象的父对象。但是,尽管可以修改父级属性以更改可视父级,但不能从QML更改对象树上下文中的对象父级。

(另外,请注意,在不将Text对象分配给Rectangle的属性情况下声明了Text对象,这与之前的示例将Gradient对象分配给矩形的gradient属性不同。这是因为Item的children属性已设置为类型的默认值属性以启用此更方便的语法。)

注释

QML中的注释语法与JavaScript相似:

· 单行注释以//开头,并在该行的末尾结束。

· 多行注释以/ *开头,以* /结束

Text {
text: "Hello world!" //a basic greeting
/*
We want this text to stand out from the rest so
we give it a large size and different font.
*/
font.family: "Helvetica"
font.pointSize: 24
}

处理QML代码时,引擎将忽略注释。它们对于解释一段代码的作用是有用的,无论是供以后参考还是与他人解释该实现。

注释也可以用于防止执行代码,这有时对于跟踪问题很有用。

Text {
text: "Hello world!"
//opacity: 0.5
}

在上面的示例中,Text对象将具有正常的不透明度,因为线的不透明度:0.5已变成注释。

相关推荐

惊人揭秘:JavaScript的神秘起源(javascript的由来)

JavaScript是当今互联网上最广泛使用的编程语言之一,被用于网页交互、游戏开发、移动应用程序等众多领域。但是,你是否知道JavaScript的神秘起源?今天,我们将揭秘这个曾经让人疑惑的问题。1...

Web前端:什么是JavaScript框架?有什么作用?(web前端的三大框架)
Web前端:什么是JavaScript框架?有什么作用?(web前端的三大框架)

  有许多最好的JavaScript框架可供Web开发人员使用,它们各有利弊。JavaScript框架为JavaScript开发人员提供了开发J...

2023-03-21 19:13 xiyangw

Web前端:JavaScript编程语言有哪些优势?(javascript库有哪些)
Web前端:JavaScript编程语言有哪些优势?(javascript库有哪些)

  JavaScript编程语言是web开发中最简单、最全面、最面向结果的语言之一。这种语言使得数据的处理和计算变得轻而易举。这也有助于增加屏幕的视觉效果。  ...

2023-03-21 19:13 xiyangw

为什么JavaScript这么火?都有哪些作用?(javascript用来干嘛)
为什么JavaScript这么火?都有哪些作用?(javascript用来干嘛)

JS的热度一直不减,很多程序员对它的评价就是“能担当大任”,评价之高可见对JS的青睐程度不同一般。无论事物还是人物,不可能想想就能火起来的,都是有一定原因的。J...

2023-03-21 19:13 xiyangw

关于JavaScript你可能不知道的7个功能(您保存的文件格式可能包含有不兼容的功能,如何解决)
关于JavaScript你可能不知道的7个功能(您保存的文件格式可能包含有不兼容的功能,如何解决)

技术领域总是充满着神秘的未知和挑战,有趣又令人不能自拔。就像JavaScript,即使是每天使用它进行开发交互的开发人员,而语言的某些部分仍然未被开发。本篇文...

2023-03-21 19:12 xiyangw

快来领取,33个常用JavaScript功能已封装成方法,拿来即用
快来领取,33个常用JavaScript功能已封装成方法,拿来即用

在实际开发中,为了提高开发的效率,我们会把常用到的功能封装成方法,这样后期开发需要,拿来即用。这里分享33个在实际开发中经常需要用到的功能(已封装成方法),分享...

2023-03-21 19:12 xiyangw

JavaScript 常用功能总结(javascript日常用途有哪些)
JavaScript 常用功能总结(javascript日常用途有哪些)

编吐血整理加上翻译,太辛苦了~求赞!本文主要总结了JavaScript常用功能总结,如一些常用的额JS对象,基本数据结构,功能函数等,还有一些常用的设计模式...

2023-03-21 19:12 xiyangw

JavaScript 无处不在(javascript undefine)
JavaScript 无处不在(javascript undefine)

你知道那个梗吗?就是有人试图在任何带有屏幕和某种输入界面的电子设备上运行Doom游戏那个?结果今天我们开始在JavaScript这边也看到这种现象了。由...

2023-03-21 19:11 xiyangw

你可以用JavaScript做什么?(javascript能干啥)
你可以用JavaScript做什么?(javascript能干啥)

正如我们所提到的,JavaScript是一种用途极其广泛的语言,可以用来实现许多不同的目标。为了让你充分了解这种脚本语言的多样性,我们在下面列出了几个示例。请...

2023-03-21 19:11 xiyangw

JS小知识,分享20个有用 JavaScript 小技巧上篇(六)

您可能已经知道JavaScript是世界上使用最广泛的编程语言。它用于Web、移动混合应用程序、服务器端(NodeJS)和各种其他应用程序。由于它可用于在Web浏览器中显示以及使用no...

Javascript 在 2023 年的优势(javascript优势)
Javascript 在 2023 年的优势(javascript优势)

Javascript是一种编程语言,近年来已成为最流行和使用最广泛的语言之一。它是一种通用语言,可用于各种应用程序,包括Web开发、移动应用程序开发,甚至...

2023-03-21 19:11 xiyangw

什么是JavaScript?为什么使用JavaScript?(javascript是由什么语言编写的)
什么是JavaScript?为什么使用JavaScript?(javascript是由什么语言编写的)

JavaScript是一种客户端脚本语言,还可以使用Node.js将其用作服务器端语言。我们称之为脚本语言,因为它在执行之前不需要编译。在运行时,每个命令或行...

2023-03-21 19:10 xiyangw

这就是 JavaScript 的用途(这就是我们东方人的魅力)
这就是 JavaScript 的用途(这就是我们东方人的魅力)

有许多不同的地方可以使用JavaScript,但最常见的地方是在网页中。事实上,对于大多数使用JavaScript的人来说,在网页中是他们唯一使用它的地...

2023-03-21 19:10 xiyangw

Web前端:JavaScript的6大有趣用途(web前端面试题及答案)
Web前端:JavaScript的6大有趣用途(web前端面试题及答案)

  JavaScript是一种基于文本的跨平台、解释型和面向对象的语言。JavaScript用于客户端和用户端开发,也以开发网页而闻名。它用于吸引用户,因为它允...

2023-03-21 19:10 xiyangw

自学WEB前端多久可以找到一份工作?(自学web前端开发多久)
自学WEB前端多久可以找到一份工作?(自学web前端开发多久)

零基础,非计算机专业,自学转行成功,目前工作6年。第一步,先学HTML+CSS,网上视频教程一大堆。照着视频做布局,在没有熟练布局之前,别去做别的。熟练布局的标...

2023-03-21 19:09 xiyangw

取消回复欢迎 发表评论: