Linuxkiss
    首页 Linux C/C++ C++面试 Qt答疑 Qml中文手册 Qt CMake Python 工具
Linuxkiss
www.linuxkiss.com 你可以精通一门IT技术
  1. 首页
  2. Qml中文手册
  3. 正文

QML中JavaScript环境限制(JavaScript Environment Restrictions)

2020年08月21日 17点热度 0人点赞

QML中JavaScript环境限制

QML对JavaScript代码实施以下限制:

  • 写入.qml文件中的JavaScript代码无法修改全局对象。.js文件中的JavaScript代码可以修改全局对象,并且导入时这些修改对.qml文件可见。在QML中,全局对象是常量-无法修改或删除现有属性,也不能创建任何新属性。

    大多数JavaScript程序并非故意修改全局对象。但是,JavaScript自动创建未声明的变量是对全局对象的隐式修改,在QML中被禁止。

    假设该a变量在作用域链中不存在,则以下代码在QML中是非法的:

// Illegal modification of undeclared variable
a = 1;
for (var ii = 1; ii < 10; ++ii)
    a = a * ii;
console.log("Result: " + a);

可以对其进行微不足道的修改。

var a = 1;
for (var ii = 1; ii < 10; ++ii)
    a = a * ii;
console.log("Result: " + a);

任何隐式或显式修改全局对象的尝试都将导致异常。如果未捕获,将导致打印警告,其中包括违规代码的文件和行号。

  • 全局代码在缩小的范围内运行。在启动期间,如果QML文件包含带有“全局”代码的外部JavaScript文件,则会在仅包含外部文件本身和全局对象的作用域中执行该文件。也就是说,它将无法正常访问QML对象和属性。

    允许仅访问脚本局部变量的全局代码。这是有效的全局代码的示例。

var colors = [ "red", "blue", "green", "orange", "purple" ];

访问QML对象的全局代码将无法正确运行。

// Invalid global code - the "rootObject" variable is undefined
var initialPosition = { rootObject.x, rootObject.y }

由于尚未完全建立QML环境,因此存在此限制。要在环境设置完成后运行代码,请参阅“ 应用程序启动代码”中的JavaScript。

  • this在大多数情况下,QML中未定义的值。this从JavaScript绑定属性时支持该关键字。在QML绑定表达式中,QML信号处理程序和QML声明的函数this引用范围对象。在所有其他情况下,thisQML中未定义的值。

    要引用特定对象,请提供一个id。例如:

Item {
    width: 200; height: 100
    function mouseAreaClicked(area) {
        console.log("Clicked in area at: " + area.x + ", " + area.y);
    }
    // This will pass area to the function
    MouseArea {
        id: area
        y: 50; height: 50; width: 200
        onClicked: mouseAreaClicked(area)
    }
}

另请参阅范围和命名解析。

 

英文官方地址:https://doc.qt.io/qt-5/qtqml-javascript-hostenvironment.html#javascript-environment-restrictions

标签: JavaScript qml中文手册 qml中文文档
最后更新:2020年08月21日

Leo

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >
关注公众号

日历
2021年4月
一 二 三 四 五 六 日
« 2月    
 1234
567891011
12131415161718
19202122232425
2627282930  
最新 热点 随机
最新 热点 随机
windows中出现"无法解析的外部符号"到底是什么原因 Qt5中lambda表达式用法,非常实用 warning: class 'InterFace' defines a non-default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator 无法解析的外部符号 "public: static struct QMetaObject const Windows下Qt代码出现的错误总结 QT Creator如何在创建项目的时候,头文件和cpp文件的首字母默认大写
python使用10--Python中的for循环 opencv系列10--膨胀与腐蚀 [ api:getStructuringElement,api:dilate,api:erode ] opencv系列33--基于距离变换与分水岭的图像分割 [ api:distanceTransform,watershed ] C++中const有什么作用 QT 下 json格式数据的 生成 和 解析 二级指针输出的特性【实例】
标签聚合
C++ qmake qml中文手册 qml中文文档 C/C++面试 openCv Linux Qt

COPYRIGHT © 2015-2021 Linuxkiss. ALL RIGHTS RESERVED.

苏ICP备12059464号-2