解读QML之一

http://blog.csdn.net/chenlong12580/article/details/8596342

解读QML之一

Qt QML模块提供了用于实现QML框架的C++类。客户端可以使用这些类与QML运行时交互(例如:数据注入或调用对象的方法),并从QML文件实例化一个 对象的层次结构。Qt QML模块提供了许多的C++类,而并非仅仅是列在下面的类。然而列在下面的

类提供了QML运行时的基础和QML的核心概念。

QML运行时

一个典型的QML应用程序有一个C++函数的入口点,该入口点是:实例化一个QQmlEngine并且使用QQmlComponent加载一个QML文 档。引擎(QQmlEngine对象)提供了一个默认的QQmlContext,这是一个顶级的上下文,用于执行定义在QML文档中的方法和表达式。定义 在QML文档中的对象层次将会通过调用QQmlComponent实例化对象的create()方法被实例化。

客户端可能需要通过注入属性或者对象到上下文中修改引擎提供的默认QQmlContext。它们可以通过调用QQmlEngine::rootContext()方法来访问顶级的上下文。

在实例化对象之后,客户端通常就将控制权传递给应用程序的事件循环,以使得用户输入时间(例如鼠标点击)可以被应用程序分发和处理。

注意:Qt Quick模块提供了一个便利的类:QQuickView,该类提供了QML运行时,以及用于显示QML应用的可视化窗口。

QQmlEngine类

QQmlEngine类提供了一个可以用于管理定义在QML文档中对象集成层次的引擎。它提供了一个根QML上下文,表达式可以在该上下文中执行,并且可以确保在需要的时候可以正确的更新对象的属性。

QQmlEngine允许一个全局的配置应用到被它管理的所有的对象上。例如:QNetworkAccessManager用于网络通信,文件路径用于持久性的存储。

可以查看QQmlEngine类文档获取更多信息,并且了解到它如何被应用到应用程序中。

QQmlContext类

QQmlContext类为对象的实例化以及表达式的评估提供了一个上下文环境。所有的对象都在一个特定的上下文中实例化,并且应用程序运行中要执行的表达式都在一个特定的上下文中执行。这个上下文定义了符号是如何被解析的,以及表达式操作的值。

查看QQmlContext类文档获取更多的信息,以及如何获取一个对象的上下文。

动态对象实例化以及表达式的执行

动态对象的实例化以及动态表达式的计算都是QML的核心概念。QML文档定义了可以在运行时通过QQmlComponent实例化的对象类型。一个
QQmlComponent类的实例可以通过C++直接创建,或者是通过Qt.createComponent()方法在QML代码中创建。属性表达式可
以在C++中通过QQmlExpression类计算,并且这些表达式可以直接在QML上下文中使用。

QQmlComponent类

QQmlComponent类可以用来加载QML文档。它需要QQmlEngine来实例化定义在QML文档中的对象层次。

查看QQmlComponent获取更多的信息,以及如何使用QQmlComponent。

QQmlExpression类

QQmlExpress类为客户端提供了一种在C++中执行JavaScript表达式的方式,使用特定了QML计算上下文。这使得客户端可以通过id访问QML对象。返回的计算结果的类型是QVariant,并且转换原则定义在QML引擎中。

查看QQmlExpression类文档获取更多的信息,以及如何在应用程序中使用QQmlExpression。

QML的类型系统

在QML文档中用于定义对象层次的类型无非来源于以下几种:

*通过QML语言原生提供

*使用QML模块通过C++注册

*QML模块提供的QML文档

当然,应用程序开发者也可以提供他们自己的类型:可以直接通过C++类型注册,也可以在QML文档中定义可重用的组件,然后导入。

无论类型的定义来自哪里,引擎都要求这些类型对属性和实例都是类型安全的。

基本类型

QML语言有一些内建的原语类型,包括整型,双精度浮点型,字符串类型以及布尔类型等。对象可以拥有这些类型的属性,并且这些类型的值可以作为参数传递给对象的方法。

查看QML基本类型文档获取更多信息。

QML支持一系列的基本类型。一个基本类型通常指的是一个简单的值,例如一个int或者一个string。和QML对象类型做对比,QML对象类型通常指的是一个包含属性,信号和方法的对象。不同于对象类型,基本类型不能声明QML对象:例如,不能声明一个int{}对象或者一个size{}对象。

基本类型通常这么使用:

*单个的值(例如:int指一个单个数字,var指条目列表)

*一个包含了一系列属性-值对的值(例如:size值包含了width和height属性的值)

一些基本类型是引擎默认支持的,使用它们不需要导入声明,然而其它的基本类型则需要导入模块后才能使用。所有罗列在下面的类型都可以在QML文档中作为属性使用,除了:

*list必须和一个QML对象一起使用

*enumeration不能被直接使用,除非枚举类型被一个注册的QML对象类型定义

QML语言提供的基本类型

QML模块提供的基本类型

QML模块扩展QML语言提供更多的基本类型。例如:QtQuick模块提供的基本类型罗列如下:

目前,只有Qt提供的QML模块可以提供基本类型,但是这种局面在将来发布的QtQML可能会被改变:我们可以使用一个特定的QML模块提供的类型,客户端只需要早QML文档中导入该模块。

一些基本的类型也拥有属性,例如:font类型就具有pixelSize,family和b属性。与对象类型的属性不同的是,基本类型的属性不提供它们自己属性改变的信号。因此,仅仅只能为基本类型的属性创建属性改变信号的处理者。

基本类型的任一属性改变,那么属性改变的信号就会被发射,例如:

JavaScript类型

JavaScript对象和数组都被QML引擎支持。任何标准的JavaScript类型都可以使用通用的var类型创建和存储。

例如,标准的Date和Array类型都是可使用的:

QML对象类型

QML对象类型就是那些可以实例化的QML对象。QML对象类型都是从QtObject继承而来,并且通过QML模块提供。应用程序可以导入这些模块继而使用这些类型。QtQuick模块提供了大多数在QML中用于创建UI的类型。

每一个QML文档都隐式的定义了一个QML对象类型,它可以在QML文档中重用。

Rectangle就是一个对象类型:它可以被用来创建Rectangle类型的对象。

自定义的QML对象类型可以通过创建一个定义了该对象类型的.qml文件来完成,或者是通过C++定义QML类型并将该类型注册到QML引擎。

通过.qml文件自定义QML类型举例如下:

注:还可以通过Component定义匿名类型,如下:

通过C++定义QML类型举例:略。

时间: 2024-11-13 10:10:19

解读QML之一的相关文章

解读QML之四

解读QML之四 QML对象属性 每一个QML对象类型都定义了一系列属性.每创建一个该对象类型的实例,该实例的这些属性也自动被创建了.接下来我们讨论几种不同类型的属性. id属性 每一个QML对象类型都有一个唯一确定的id属性.这个属性是由QML语言自身提供的,并且在QML对象类型中不能被重定义和重载. 我们必须为id属性指定一个值允许该对象被唯一标示并且可用于被其它对象引用.Id属性值必须以小写字母或者下划线开始,只能包含字母,数字和下划线等字符. 下面是一个TextInput对象和一个Text

解读QML之三

QML语法 1.QML基本语法 1.1导入声明 导入声明允许客户端告诉QML引擎可以在QML文档中使用哪些模块,JavaScript资源以及组件目录.文档中可以使用的类型依赖于在文档中导入的模块.资源以及目录. 导入类型 总共有三种类型的导入.对于每一种导入类型在语法上都有细微的差别,并且不同的导入类型有着不同的语义. *模块(命名空间)的导入 最常用的导入类型就是模块导入.客户端可以导入那些已经注册QML对象类型和JavaScript资源到给定命名空间的QML模块. 导入模块最通用的格式如下:

解读QML之二

QML文档 QML文档是用QML语法组成的字符串.一个文档定义了一个QML对象类型.文档以”.qml”最为后缀,可以保存在本地和网络上,可以使用代码生成.一 个在文档中定义的对象类型的实例,也可以使用Component在QML代码中创建,或者是在C++中使用QQmlComponent创建.一旦某一个对 象类型明确的在QML对象系统中使用特定的名称注册了,那么该类型就可以在其它的文档中 直接用来声明对象了.在文档中定义可重用的QML对象类型对于允许客户端编写模块来说是十分重要的,也是的代码高度可读

Qt QML referenceexamples attached Demo hacking

/********************************************************************************************* * Qt QML referenceexamples attached Demo hacking * 说明: * 1. 本源代码来自Qt自带的Example,而本文也仅仅是代码解读,需要有点基础: * 2. 由于是Qt自带Demo,分为几个文件,文件存在联系,而本人把所有代码放在这个文件里,会照成阅读困难:

ViewGroup源码解读

我们之前刚刚分析完事件传递机制和view的源码,如果没有看过的,建议看完View的事件拦截机制浅析以及View的事件源码解析.这次我们来分析下viewgroup的. 可能有人会想,怎么又是源码分析,肯定又是一大通.其实没你想的那么复杂.仔细分析一波就行了. 解读ViewGroup 我们都知道,一个事件完整的流程是从dispatchTouchevent–>onInterceptTouchevent–>onTouchEvent.我们先不说事件监听的问题.上述三个步骤就是正常一个点击的流程.前面我们

mysql之show engine innodb status解读(转)

add by zhj: 我第一次知道这个命令是线上服务出了问题,然后同事用这个命令去查看死锁.但用这个命令看死锁有一定的局限性,它只能看到最后一次死锁, 而且只能看到死锁环中的两个事务所执行的最后一条语句(即被死锁卡住的那条语句),看不到整个死锁环,也看到不整个事务的语句.但是即使这亲,对我 们来说也非常有用,因为一般来说,数据库同时存在多个死锁环的可能性比较小,而且有了死锁环中的事务的最后一条语句,我们找到整个死锁环不是太难. "show engine innodb status"这

智慧中国杯百万大奖赛解读 | 学霸去哪了(二)

在上一篇中我们探讨了学生的消费数据,消费数据对本次竞赛预测来讲很重要.本篇将探索寝室门禁.图书借阅.图书馆门禁和学生成绩等一些和学生学习相关的数据,来看看学生的品行如何,虽然资助金和奖学金的性质不太一样,但我们毕竟还是想资助那些品学兼优的学生,而不是资助虽然家境很贫寒但不学无术的学生. 所以本篇探索的数据可以比较好的反应出这些情况.当然这里面还隐藏了更好玩的话题,学霸去哪了?话不多说,let's go! 一.数据目录概况 官方提供的数据分为两组,分别是训练集和测试集,每一组都包含大约1万名学生的

QCustomplot使用分享(二) 源码解读

一.头文件概述 从这篇文章开始,我们将正式的进入到QCustomPlot的实践学习中来,首先我们先来学习下QCustomPlot的类图,如果下载了QCustomPlot源码的同学可以自己去QCustomPlot的目录下documentation/qcustomplot下寻找一个名字叫做index.html的文件,将其在浏览器中打开,也是可以找到这个库的类图.如图1所示,是组成一个QCustomPlot类图的可能组成形式. 一个图表(QCustomPlot):包含一个或者多个图层.一个或多个ite

以蓝牙开发的视觉解读微信Airsync协议

微信硬件平台使用蓝牙作为近场控制的连接件,并拟定了<微信蓝牙外设协议>.这份协议更像一个标准,用于规范微信和蓝牙外设之间的数据交互场景和接口.但从开发者来看,要完全读懂这份协议,恐怕需要熟读很多遍,并且要结合调试才能真正实现微信Airsync通信.笔者对IOT和微信硬件平台的整个框架和技术都比较熟悉了,并且已经在TI的CC254X和Dialog的DA14580上实现了微信Airsync协议通信.现在回过头来,从开发的角度,对微信Airsync协议进行重新解读,以帮助新进入物联网领域的开发者更快