class QJSManagedValue#

QJSManagedValue 表示属于 QJSEngine 的JavaScript堆上的一个值。更多信息...

概述#

方法#

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单的方式告诉我们。

详细描述#

QJSManagedValue)类允许以大多数从JavaScript本身进行交互的方式与JavaScript值进行交互。您可以获取和设置属性和原型,并且可以访问数组。此外,您可以将该值转换为JavaScript对象的Qt对应项。例如,一个Url对象可能被转换为QUrl。

QJSManagedValue)总是绑定到一个特定的QJSEngine 。您不能独立使用它。这意味着您不能将一个引擎的(QJSManagedValue)用作另一个引擎的属性或原型。

与(QJSValue)相比,大部分由(QJSManagedValue)持有的值都存在于JavaScript堆上。没有内联或非管理存储。因此,您可以为原始值获取原型,并且可以获取字符串的长度属性。

只有默认构造或移动构造的QJSManagedValues不持有JavaScript堆上的值。它们表示undefined,它没有任何属性或原型。

与(QJSValue)不同,(QJSManagedValue)也不捕获任何JavaScript异常。如果对(QJSManagedValue)上的操作导致错误,它通常会返回一个(undefined)值,并且之后(hasError())将返回(true)。然后您可以使用(catchError())捕获异常,或者根据您的意愿将其传递到堆栈中。

注意

由于JavaScript堆上值的引用必须在销毁时释放,因此您不能将(QJSManagedValue)移动到不同的线程。销毁将在新线程中进行,这将与原始线程上的垃圾收集器创建竞争条件。这也意味着您不能将超出其引擎生命周期的(QJSManagedValue)保留下来。

推荐使用 QJSManagedValue 的方法是将其在栈上创建,可能通过移动一个 QJSValue 并添加一个引擎,然后在该 QJSValue 上执行必要的操作,最后将其放回一个用于存储的 QJSValue 中。在 QJSManagedValueQJSValue 之间的转换速度快。

class 类型#

此枚举表示JavaScript原生类型,如ECMA-262所规定的。

常量

描述

QJSManagedValue.Undefined

类型为 undefined

QJSManagedValue.Boolean

类型为 boolean

QJSManagedValue.Number

类型为 number

QJSManagedValue.String

类型为 string

QJSManagedValue.Object

类型为 object

QJSManagedValue.Symbol

类型为 symbol

QJSManagedValue.Function

类型为 function

请注意,null 不是一个类型,而是一种特殊的对象。您可以使用 QJSManagedValueisNull() 方法查询此条件。此外,JavaScript没有整数类型,但是它以特殊的方式处理数字以准备整数只操作。您可以使用 QJSManagedValueisInteger() 方法来确定它是否包含此类处理的结果。

__init__(value, engine)#
参数:

value 创建一个 QJSManagedValue,使用 engine 的堆空间。如果 value 本身由引擎管理并且所属的引擎不是 engine,则结果为 undefined 值,并生成警告。

__init__()

创建一个表示 JavaScript undefined 值的 QJSManagedValue,这是唯一没有存储在 JavaScript 堆上的值。在默认构造的 QJSManagedValue 上调用 engine() 将返回 nullptr。

__init__(variant, engine)
参数:

variant 创建一个使用 engine 堆空间的 QJSManagedValue

__init__(value, engine)
参数:

value 创建一个使用 engine 堆空间的 QJSManagedValue

__init__(string, engine)
参数:

string 创建一个使用 engine 堆空间的 QJSManagedValue

call([arguments={}])#
参数:

arguments – .list of QJSValue

返回类型:

QJSValue

如果这个 QJSManagedValue 表示一个 JavaScript FunctionObject,则使用给定的 arguments 调用它,并返回结果。否则返回一个 JavaScript undefined 值。

参数必须是基本值或者属于与这个QJSEngine相同的外部等方面。《a class="reference internal" href="#PySide6.QtQml.QJSManagedValue" title="PySide6.QtQml.QJSManagedValue">QJSManagedValue。 否则调用将不会被执行,并且返回 JavaScript 的 undefined 值。

callAsConstructor([arguments={}])#
参数:

arguments – .list of QJSValue

返回类型:

QJSValue

如果这个QJSManagedValue表示一个 JavaScript 函数对象,那么使用给定的 arguments 作为构造函数调用它,并返回结果。否则返回 JavaScript 的 undefined 值。

参数必须是基本值或者属于与这个QJSEngine相同的外部等方面。《a class="reference internal" href="#PySide6.QtQml.QJSManagedValue" title="PySide6.QtQml.QJSManagedValue">QJSManagedValue。 否则调用将不会被执行,并且返回 JavaScript 的 undefined 值。

callWithInstance(instance[, arguments={}])#
参数:
  • instanceQJSValue

  • arguments – .list of QJSValue

返回类型:

QJSValue

如果这个QJSManagedValue表示一个 JavaScript 函数对象,那么在 instance 上使用给定的 arguments 进行调用,并返回结果。否则返回 JavaScript 的 undefined 值。

argumentsinstance 必须是基本类型或者属于与这个QJSEngine相同的外部等方面。QJSManagedValue。 否则调用将不会被执行,并且返回 JavaScript 的 undefined 值。

deleteProperty(name)#
参数:

name – str

返回类型:

bool

从本QJSManagedValue中删除一个 name 属性。如果删除成功则返回 true,否则返回 false

deleteProperty(arrayIndex)
参数:

arrayIndex – int

返回类型:

bool

从当前 QJSManagedValue 中删除存储在 arrayIndex 的值。如果删除成功,则返回 true,否则返回 false

engine()#
返回类型:

QJSEngine

返回此 QJSManagedValue 所属的 QJSEngine。请注意,只要 QJSManagedValue 不是默认构造或移动,引擎始终有效。在后一种情况下,返回 nullptr。

equals(other)#
参数:

otherQJSManagedValue

返回类型:

bool

在此 QJSManagedValueother 上调用 JavaScript 的 ‘==’ 操作符,并返回结果。

另请参阅

strictlyEquals

hasOwnProperty(name)#
参数:

name – str

返回类型:

bool

如果此 QJSManagedValue 有一个名为 name 的属性,则返回 true,否则返回 false。不考虑原型链上的属性。

hasOwnProperty(arrayIndex)
参数:

arrayIndex – int

返回类型:

bool

如果此 QJSManagedValue 有一个索引为 arrayIndex 的数组,则返回 true,否则返回 false。不考虑原型链上的属性。

hasProperty(name)#
参数:

name – str

返回类型:

bool

如果此 QJSManagedValue 有一个名为 name 的属性,则返回 true,否则返回 false。考虑原型链上的属性。

hasProperty(arrayIndex)
参数:

arrayIndex – int

返回类型:

bool

如果此 QJSManagedValue 对象具有数组索引 arrayIndex,则返回 true,否则返回 false。会考虑原型链上的属性。

isArray()#
返回类型:

bool

如果此值代表 JavaScript 数组对象,则返回 true,否则返回 false

isBoolean()#
返回类型:

bool

如果此 QJSManagedValue 对象的类型是 boolean,则返回 true,否则返回 false

isDate()#
返回类型:

bool

如果此值代表 JavaScript 日期对象,则返回 true,否则返回 false

isError()#
返回类型:

bool

如果此值代表 JavaScript 错误对象,则返回 true,否则返回 false

isFunction()#
返回类型:

bool

如果此 QJSManagedValue 对象的类型是 function,则返回 true,否则返回 false

isInteger()#
返回类型:

bool

如果此 QJSManagedValue 对象包含整数值,则返回 true,否则返回 false。数字的存储格式不会影响对其进行的任何操作的结果,但如果存储了整数,则许多操作会更快。

isJsMetaType()#
返回类型:

bool

isNull()#
返回类型:

bool

如果此 QJSManagedValue 对象包含 JavaScript 的 null 值,则返回 true,否则返回 false

isNumber()#
返回类型:

bool

如果此 QJSManagedValue 的类型是 number,则返回 true,否则返回 false

isObject()#
返回类型:

bool

如果此 QJSManagedValue 的类型是 object,则返回 true,否则返回 false

isQMetaObject()#
返回类型:

bool

如果此值表示在 JavaScript 堆上管理的 QMetaObject 指针,则返回 true,否则返回 false

isQObject()#
返回类型:

bool

如果此值表示在 JavaScript 堆上管理的 QObject 指针,则返回 true,否则返回 false

isRegularExpression()#
返回类型:

bool

如果此值表示 JavaScript 正则表达式对象,则返回 true,否则返回 false

isString()#
返回类型:

bool

如果此 QJSManagedValue 的类型是 string,则返回 true,否则返回 false

isSymbol()#
返回类型:

bool

如果此 QJSManagedValue 的类型是 symbol,则返回 true,否则返回 false

isUndefined()#
返回类型:

bool

如果此 QJSManagedValue 的类型是 undefined,则返回 true,否则返回 false

isUrl()#
返回类型:

bool

如果此值代表 JavaScript Url 对象,则返回 true,否则返回 false

isVariant()#
返回类型:

bool

如果此值代表 JavaScript 堆上管理的 QVariant,则返回 true,否则返回 false

jsMetaInstantiate([values={}])#
参数:

values - .QJSValue 的列表

返回类型:

QJSManagedValue

jsMetaMembers()#
返回类型:

字符串列表

jsMetaType()#
返回类型:

QJSManagedValue

property(name)#
参数:

name – str

返回类型:

QJSValue

返回此 QJSManagedValue 的属性 name。如果该属性不在实际对象上找到,则在原型链中搜索。

另请参阅

setProperty()

property(arrayIndex)
参数:

arrayIndex – int

返回类型:

QJSValue

返回此 QJSManagedValue 中存储在 arrayIndex 的属性。如果该属性在实际对象上找不到,则在原型链中搜索。

prototype()#
返回类型:

QJSManagedValue

返回此 QJSManagedValue 的原型。这适用于任何值。例如,可以从布尔值中检索 JavaScript 的 boolean 原型。

另请参阅

setPrototype()

setProperty(name, value)#
参数:

将此 QJSManagedValue 上的属性 name 设置为 value。这只可以在类型为 object 的 JavaScript 值上执行。此外,value 必须是原始值或属于与此值相同的引擎。

另请参阅

property()

setProperty(arrayIndex, value)
参数:

在此QJSManagedValue中存储valuearrayIndex。这只能对类型的JavaScript值object进行,并且如果该值不是数组,则不建议这样做。此外,value必须是原始数据类型或属于与该值相同的引擎。

setPrototype(prototype)#
参数:

prototypeQJSManagedValue

设置此QJSManagedValue的原型为prototype。先决条件是prototype属于与该QJSManagedValue相同的QJSEngine,并且是对象(包括null)。此外,此QJSManagedValue还必须是对象(不包括null),且不能创建原型循环。

另请参阅

prototype()

strictlyEquals(other)#
参数:

otherQJSManagedValue

返回类型:

bool

在此QJSManagedValueother上调用JavaScript的‘===’运算符,并返回结果。

另请参阅

equals

toBoolean()#
返回类型:

bool

将管理的值转换为布尔值。如果管理值为布尔值,则返回该值。否则,根据JavaScript规则进行布尔类型转换。

toDateTime()#
返回类型:

QDateTime

如果此QJSManagedValue包含JavaScript Date对象,则返回等价的QDateTime。否则返回一个无效的QDateTime。

toInteger()#
返回类型:

int

将管理的值转换为整数。首先根据toNumber()方法的规则将值转换为数字,然后根据将JavaScript位运算符参数强制转换为32位整数的规则将其压缩到整数范围内。

在内部,值可能已经存储为整数,这种情况下会采取快速路径。

注意

将托管值转换为数字可能会抛出异常。特别是,符号不能被强制转换为数字,或者自定义valueOf()方法可能抛出异常。在这种情况下,结果为0,引擎在转换后会携带错误。

注意

将数字强制转换为32位整数的JavaScript规则并不直观。

toJSValue()#
返回类型:

QJSValue

将此 QJSManagedValue 复制到一个新的 QJSValue 。这比从 QJSManagedValue 构造 QJSValue 更低效,但保留了 QJSManagedValue 的内容。

toNumber()#
返回类型:

浮点数

将托管值转换为数字。如果托管值包含一个数字,则返回该数字。否则,将按照JavaScript规则执行数字强制转换。

注意

将托管值转换为数字可能会抛出异常。特别是,符号不能被强制转换为数字,或者自定义valueOf()方法可能抛出异常。在这种情况下,结果为0,引擎在转换后会携带错误。

toPrimitive()#
返回类型:

QJSPrimitiveValue

将托管值转换为 QJSPrimitiveValue 。如果托管值包含由 QJSPrimitiveValue 支持的类型,则复制该值。否则,将值转换为字符串,并将该字符串存储在 QJSPrimitiveValue 中。

注意

将托管值转换为字符串可能会抛出异常。特别是,符号不能被强制转换为字符串,或者自定义 toString() 方法可能抛出异常。在这种情况下,结果为未定义值,引擎在转换后会携带错误。

toQMetaObject()#
返回类型:

QMetaObject

如果此 QJSManagedValue 包含一个QMetaObject指针,则返回它。否则返回nullptr。

toQObject()#
返回类型:

QObject

如果此 QJSManagedValue 包含一个QObject指针,则返回它。否则返回nullptr。

toRegularExpression()#
返回类型:

QRegularExpression

如果这个QJSManagedValue包含一个JavaScript正则表达式对象,则返回一个等效的QRegularExpression。否则返回一个无效的实例。

toString()#
返回类型:

str

将管理值转换为字符串。如果管理值包含一个字符串,则返回该字符串。否则按照JavaScript规则执行字符串强制转换。

注意

将管理值转换为字符串可能会抛出异常。特别是,符号不能转换为字符串,或者自定义的toString()方法可能会抛出异常。在这种情况下,结果为空字符串,并且转换器在转换后带有错误。

toUrl()#
返回类型:

QUrl

如果这个QJSManagedValue包含一个JavaScript URL对象,则返回一个等效的QUrl。否则返回一个无效的实例。

toVariant()#
返回类型:

object

将此QJSManagedValue复制到一个新的QVariant中。如果isVariant()返回false,这也将创建一个有用的QVariant。QVariant可以持有QJSManagedValue支持的所有类型的值。

type()#
返回类型:

类型

返回此QJSManagedValue的JavaScript类型。