Python+Qt:别让界面拖后腿!学这招,GUI编程快得像开挂
Qt Quick是Qt给出的一种高级用户界面工具包, 它涵盖描述性语言QML, 具备语言运行时, 拥有大量的用户界面元素, 有着对QML的完美支持, 含有设计器, 还支持QML与C混合编程等众多技术。Qt Quick是集合了一些新UI技术的事物, 它主要由3部分构成, 一部分是Qt IDE, 这里面包含着Qt Quick设计器, 另一部分是QML语言, 还有一部分是Qt库中的模块, 也就是Qt4。QML是一种扩展, 它利用声明性语法, 通过QML元素来指定每一个用户界面, 这些元素组合形成各种组件, Qt的模块实现了QML语言与其适用元素间的接口, 该模块还提供C接口, 可用于在Qt/C应用程序中加载QML文件并与之通信, 其作用是把QML元素与以前的标准C类相结合。并且QML是对另一种东西的扩展, 它借助声明性语法, 利用QML元素去指定每一个用户的界面, 这些元素组合起来变成各种组件, Qt的模块达成了QML语言与对它适用的元素之间的接口, 该模块还给出一个C接口, 能够用来在Qt/C应用程序里加载QML文件并跟它通信, 它的用途是将QML元素跟以前的标准C类融合在一起。就图形引擎而言, Qt5是基于GPU的, 应用开发套件Qt, 它适用于触摸屏的UI开发, 它增加了对C11的支持, 还加强了对QML的支持, 并且它能够进行混合编程, Qt5是从Qt4逐渐、平稳地升级而来的, 而且与Qt4有着高度的兼容性。在Qt5的情形下, 系列于那个时候从QtGui里被分离出去, 进而变成了单独的模块, 随着Qt的被引入, 它也渐渐地和系列撇清了关系。在Qt5状况下的GUI编程之中, 存在着两套不一样的东西, 其一为使用, 其二为 (使用Scene Graph)。相对而言, 与Qt4比较, Qt5把那个叫Qt的模块, 分解成了跟界面没有关联的Qt Qml, 以及基于QML这种语言而生的一个类库Qt.0。Qt资料领取→「链接」第一章 QML( Qt Meta- )------ 、Qt对象系统、Qt Quick标准库Qt Quick技术的核心以及基础是QML, 它是一种标记性语言, 简便且容易学习, 将其用于描述一个程序的用户界面。要注意的是, 这里有个Meta -, 乃元对象。一、语言, 是一种描述, 它限定了脚本语言的所有属性、方法以及对象内容, 其他语言能够将其实现作为功能基础, 像这样, 它描述了这些方面: 语法情况、它的类型、语句构成, 还有关键字、保留字、运算符以及对象。QML提供了一种环境, 这里的环境是为编写QML应用程序而专门量身定制的, 该环境与浏览器所提供的主机环境不一样, 也和服务器端环境像Node.js那样有差异, 比如说的这点差异在于它不会提供浏览器环境里常见的窗口对象, 也不会具备DOM接口, 在QML运行的时候, 它达成了语言规范标准。二、QML语法格式与CSS极为相像, 然而却支持形式方面的编程控制, 于QML里, 借助具有属性的对象树去表示用户界面, 每一个QML基本元素皆对应着一个C类, 在你所写的QML文件被加载之际, QML引擎最终会为文件里的每一个基本类型创建一个C类对象, 这些对象依照树的结构予以组织起来。可以借助Qt Quick, 来给手机开发应用程序, 其可以拥有直观的用户界面, 还能给多媒体播放器开发应用程序, 具备现代的用户界面, 也能为机顶盒开发应用程序, 有着流畅的用户界面, 以及给其他便携式设备开发应用程序。1、QML的语法1.1 对象是类的实例Rectangle{ width:320; height:480; Image{ source:images/IMG_001.jpg; anchors.centerIn:parent; } }需用一对花括号去描述对象, 要在花括号前面写上对象所属的类型名字也就是类名, 于花括号之间, 是针对对象进行属性初始化的语句。在示例QML文档里, 存在着两个对象, 其中一个对象是什么呢, 另一个是Image, 这两个对象都是由Qt Quick所提供的置于内部的类。1.2 QML支持表达式Rectangle{ width:23*10; height:6*80; color:#121212; }1.在QML里, 3的注释情况跟C相同, 单行注释是以//作为开头, 多行注释则是以/*作为起始, 以*/作为结尾。1.4 QML中的属性对应于C中的类的成员变量QML文档里面所运用的类型大概存在三类: 其一为由QML语言自身给予的类型, 其二为由QML模块供应的类型, 其三为被导出到QML环境当中的C类型, QML里对象的属性是具备类型安全检测的, 仅仅能够指定跟属性类型相匹配的值。基础类型, 身分标识属性, 罗列属性, 信号处理装置, 群组属性, 额外添加属性。1.4.1, QML所支持的基本类型含有int, 还有real, 且有bool, 同时有color及list, 另外还有font等等。Rectangle{ width:320; //int height:480; Button{ id: quit; text: 退出; //string anchors.left:openFile.right; anchors.leftMargin:4; anchors.bottom:openFile.bottom; z:1.5; //real visible: false //bool } }1.4.2, 一个对象的id属性具备唯一性, 于同一个QML文件里, 不同对象的id属性的值不可重复, 一旦给定了一个对象的id, 那么可在其他对象或者脚本中凭借id去引用该对象。1.4.3, QML对象有着列表属性, 其类型为list, 列表乃是装在方括号内, 由以逗号作分隔的多个元素构成的集合, 列表内部仅可容纳QML对象, 不可含有任何基本类型的字面量, 要是非得包含, 那就得借助var变量, 倘若一个列表里仅有一个元素, 也能够省略方括号。Item{ children:[ Text{ text:textOne; }, Text{ text:textTwo; } ] Component.onCompleted:{ for(var i0; i1.4.4信号处理器, 和Qt里的槽是等价的, 跟C里明确定义的函数很类似, 是代码块, 其名字通常是on这种形式, 像Qt Quick里有一个信号(), 信号处理代码:Rectangle{ width:320; //int height:480; Button{ id: quit; text: 退出; //string anchors.left: parent.left; anchors.bottom: parent.bottom; anchors.bottomMargin: 4; onClicked{ //信号处理器 Qt.quit(); } } }1.使用“.”操作符, 将相关的属性形成, 一个逻辑组, 分组之后的属性进行赋值。font属性的类型自身是个对象, 此对象存在、bold、、等属性, 针对类型为对象的属性值。可以使用.操作符展开对象的每一个成员对其赋值Text{ font.pixelSize: 18; font.bold: true; }可以借助分组符号, 也就是一对花括号, 将需赋值的成员放置在一起, 进而给它们进行赋值。Text{ font{ pixelSize: 18; font.bold: true; } }1.4.6 附加属性, 乃是附加于一个对象之上的额外属性, 和附加属性相类似的概念, 存在着附加信号处理器。Item{ width:100; height:100; focus: true; Keys.enabled: false; //附加属性 }2、QML数据类型是构成QML文档的基础2.QML支持C那些常见的数据类型所构成的基本类型, 其中, 基本类型通常被用于两种值, 一种是单值, 还有一种那个包含了一组简单的“属性 - 值”对的值例如像size。QML默认支持的有基本类型, 有模块提供的那种要导入模块才能够使用, Qt全局对象所提供的一些函数, 对基本类型的值进行操作。2.2 类型, QML 引擎直接对对象以及数组予以支持, 任何标准类型能够于 QML 里借助 var 类型来创建, 并且进行存储。2.3 对象类型是 QML 对象类型, 它用于 QML 对象的实例化 , 对象类型能够通过指定类型名称, 并在其后的一组大括号里面包含相应属性的方式来声明一个对象。QML对象类型, 它是继承自其他的类型, 这些类型是由各个模块所进行提供的, 除去导入模块外, 有着能够自定义的QML对象类型。三、用于开发QML应用的标准库是Qt Quick模块, 它提供了创建用户界面运用QML时所需的全部内容, 涵盖可视化类型, 交互类型, 动画, 模型与视图, 还有粒子特效与着色器等。