HOWTO:QML程序在N9中以Portrait格局显示

原稿地址:由于在Harmattan中,X11服务器在塑造是未曾引进Rand奥德赛扩张的支撑,由此N9的显示器被锁定在了landscape情势。所以程序猿要求担负本人的次第的rotation。对于利用QML的程序,一方面能够运用MeeGoComponents来落到实处那意气风发功效。当然对于纯粹的QML程序,要落到实处也是很简单的。

全局变量,看名称就能够想到其意义正是在程序中到处都能动用的变量。那在自投罗网程度上违反了“模块化设计”那么些观念。在小编刚接触编制程序的时候老师就说过全局变量有剧毒,就跟goto风流罗曼蒂克律;但在其实工程中它实在很有用,使用合适的话反而能让一切软件构造更鲜明、紧密。本文结合实际经历向大家介绍在QML主次中怎么样有效行使全局变量。

原文 QML Engine Internals, Part 1: QML File Loading

importQtQuick1.0Item{height:480;width:854Item{height:854;width:480anchors.centerIn:parentrotation:270Text{anchors.centerIn:parentfont.pixelSize:50text:"HappyNewYear!"}}}

全局变量的作用

第大器晚成要表明的是,大家那边说的全局变量不是整数、浮点数那样的简便变量,而是复杂的类对象。那什么时候会用到全局变量呢?在小编的推行中,日常上边二种情形会用到全局变量:

  1. 财富分享、重用。整个应用程序相关的设置,举个例子说程序的版本、风格(theme)、字体财富等,那几个数量契合放入二个全局变量,从而能够在方方面面程序的任何地方往往使用;
  2. 数据传递。全局变量在代码里都能访谈到,也正是一块分享的内存空间,所以能够在差异之处传递数据。但借使是二十四线程情状下的话,必要酌量好互斥;
  3. 事件驱动。我们能够将该变量注明为QObject子类,然后定义好功率信号与槽,然后在程序需求的地点延续那几个能量信号可能调用槽函数,这样我们的主次就经过这几个全局变量连接起来了。那就约等于有了一个着力驱动,比如只要一个时限信号发出来,程序中有所连接的槽函数就都会被调用,而无需关怀是或不是漏掉了三个。

那多少个特点加起来实在也便是推特所尊崇的Flux设计模块,焦点情想轻易讲正是把程序的层级关系变得轻便,单少年老成驱动。要是您被综错复杂的模块化设计弄糊涂了,那能够实施Flux这种清晰明了的策画思路。

和C++中的使用全局变量比较,QML中央银行使起来更为便于,因为QML中有质量绑定,尤其是上面第三点,确实能够让我们的次第“智能化”比比较多。同不平日候也要申明的是,这里说的“全局”并不是真的大局,而是指QML试行情形中的全局;C++中的全局变量不在本文探讨范围之内。

翻译注:这一个深入分析QML引擎的作品共4篇,分析特别彻底,在境内大概一直不找到相像的剖析,为了便利本国的QT/QML爱好者和劳引力也能越来越好的就学和透亮QML引擎,故将那个连串的4篇小说翻译过来。翻译并不是完全直译,有白玉微瑕,请指正,谢谢!

QML中定义全局变量

我们知晓QML是索要QML引擎(即QQmlEngine)来解释实行的,所以QML中的全局变量本质是QML施行上下文(QQmlContext)的属性。定义QML全局变量也正是把大家的指标设置为QML实施上下文的性质。

有三种办法:单独定义,或然批量定义,在那之中批量定义又可分为C++情势和QML情势。大家把那几个艺术都介绍下。

———————————————————————————————————————————

独立定义

该方法首要步骤是:

  1. 概念多个QObject的子类,设计好它的随机信号、槽还应该有属性;

  2. main函数里营造对象;

  3. QQmlEngine创设之后尚未加载任何QML文件在此以前,将该对象设置为实行上下文的习性,并取三个靠边的名字:

    engine->rootContext()->setContextProperty("$hub", cppBackend);
    

这样$hub就改为了QML中的全局变量,你能够间接行使它在那之中的各样元数据(非时域信号、槽、属性、枚举类型等等)。

这里大家约定,用$用作全局变量的开头字母,这一个在JavaScript和QML中是合法的,便于大家分别普通局部变量和全局变量。

在这里个体系的博文中,大家将深入查找遮掩在QML引擎背后的这个不敢问津的玄机,一步步发布它个中落实的原理。这几个博文都是基于Qt5本子的QtQuick,QtQuick 2.0来深入剖判的。