QJSManagedValue 类
QJSManagedValue 代表属于 QJSEngine 的 JavaScript 堆上的一个值。 更多信息...
头文件 | #include <QJSManagedValue> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake | QT += qml |
自 | Qt 6.1 |
公共类型
枚举 | 类型 { 未定义,布尔值,数字,字符串,对象,……,函数 } |
公共函数
QJSManagedValue() | |
QJSManagedValue(QJSValue value, QJSEngine *engine) | |
QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine) | |
QJSManagedValue(const QVariant &variant, QJSEngine *engine) | |
QJSManagedValue(const QString &string, QJSEngine *engine) | |
QJSManagedValue(QJSManagedValue &&other) | |
~QJSManagedValue() | |
QJSValue | call(const QJSValueList &arguments = {}) const |
QJSValue | callAsConstructor(const QJSValueList &arguments = {}) const |
QJSValue | callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const |
bool | deleteProperty(const QString &name) |
bool | deleteProperty(quint32 arrayIndex) |
QJSEngine * | engine() const |
bool | equals(const QJSManagedValue &other) const |
bool | hasOwnProperty(const QString &name) const |
bool | hasOwnProperty(quint32 arrayIndex) const |
bool | hasProperty(const QString &name) const |
bool | hasProperty(quint32 arrayIndex) const |
bool | isArray() const |
bool | isBoolean() const |
bool | isDate() const |
bool | isError() const |
bool | isFunction() const |
bool | isInteger() const |
bool | isNull() const |
bool | isNumber() const |
bool | isObject() const |
bool | isQMetaObject() const |
bool | isQObject() const |
bool | isRegularExpression() const |
bool | isString() const |
bool | isSymbol() const |
bool | isUndefined() const |
bool | isUrl() const |
bool | isVariant() const |
QJSValue | property(const QString &name) const |
QJSValue | property(quint32 arrayIndex) const |
QJSManagedValue | prototype() const |
void | setProperty(const QString &name, const QJSValue &value) |
void | setProperty(quint32 arrayIndex, const QJSValue &value) |
void | setPrototype(const QJSManagedValue &prototype) |
bool | strictlyEquals(const QJSManagedValue &other) const |
bool | toBoolean() const |
QDateTime | toDateTime() const |
int | toInteger() const |
QJSValue | toJSValue() const |
double | toNumber() const |
QJSPrimitiveValue | toPrimitive() const |
const QMetaObject * | toQMetaObject() const |
QObject * | toQObject() const |
QRegularExpression | toRegularExpression() const |
QString | toString() const |
QUrl | toUrl() const |
QVariant | toVariant() const |
QJSManagedValue::Type | type() const |
QJSManagedValue & | operator=(QJSManagedValue &&other) |
详细描述
QJSManagedValue类允许以大多数从JavaScript本身可以交互的方式与JavaScript值进行交互。您可以获取和设置属性和原型,并且可以访问数组。此外,您还可以将值转换为JavaScript对象的Qt等价物。例如,可以将Url对象转换为QUrl。
QJSManagedValue始终绑定到特定的QJSEngine。您不能单独使用。这意味着您不能将来自一个引擎的QJSManagedValue作为来自不同引擎的QJSManagedValue的属性或原型。
与QJSValue相比,几乎所有的QJSManagedValue持有的值都存在于JavaScript堆上。没有内联或未托管存储。因此,您可以获取原始值的原型,也可以获取字符串的length
属性。
只有默认构造或移动的QJSManagedValues不持有JavaScript堆上的值。它们代表undefined
,没有任何属性或原型。
与QJSValue相比,QJSManagedValue不会捕获任何JavaScript异常。如果对QJSManagedValue的操作导致错误,它通常会返回一个undefined
值,并且QJSEngine::hasError()会在之后返回true
。然后您可以使用QJSEngine::catchError()来捕获异常,或者根据您的判断将其传递到堆栈中。
注意:由于JavaScript堆上的值的引用必须在销毁时释放,因此你不能将一个QJSManagedValue移动到不同的线程。销毁将在新线程中进行,这将与原始线程上的垃圾回收器产生竞态条件。这也意味着你不能超出其引擎的生命周期来持有QJSManagedValue。
处理QJSManagedValue的推荐方法是将其在堆栈上创建,可能通过移动一个QJSValue并添加一个引擎,然后在上面执行必要的操作,最后将其移动回用于存储的QJSValue。在QJSManagedValue和QJSValue之间移动既快速又简单。
成员类型文档
枚举 QJSManagedValue::Type
此枚举表示JavaScript原生类型,如ECMA-262中指定。
常量 | 值 | 描述 |
---|---|---|
QJSManagedValue::Undefined | 0 | undefined 类型 |
QJSManagedValue::Boolean | 1 | boolean 类型 |
QJSManagedValue::Number | 2 | number 类型 |
QJSManagedValue::String | 3 | string 类型 |
QJSManagedValue::Object | 4 | object 类型 |
QJSManagedValue::Symbol | 5 | symbol 类型 |
QJSManagedValue::Function | 6 | function 类型 |
注意,null值并不是它自己的类型,而是一种特殊类型的对象。你可以使用QJSManagedValue的isNull()方法查询该条件。此外,JavaScript没有整数类型,但它在准备仅对整数进行操作时,会使用对数字的特殊处理。你可以使用QJSManagedValue的isInteger()方法来查询它是否包含这种处理的输出。
成员函数文档
[constexpr noexcept]
QJSManagedValue::QJSManagedValue()
创建一个表示JavaScript undefined
值的QJSManagedValue。这是唯一不在JavaScript堆上存储的值。在默认构造的QJSManagedValue上调用engine()将返回nullptr。
QJSManagedValue::QJSManagedValue(QJSValue value, QJSEngine *engine)
从value创建一个QJSManagedValue,使用engine的堆。如果value本身被管理,且它所属的引擎不是engine,则结果是undefined
值,并生成一个警告。
QJSManagedValue::QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine)
使用engine的堆从value创建一个QJSManagedValue。
QJSManagedValue::QJSManagedValue(const QVariant &variant, QJSEngine *engine)
使用engine的堆从variant创建一个QJSManagedValue。
QJSManagedValue::QJSManagedValue(const QString &string, QJSEngine *engine)
使用引擎堆从字符串创建一个QJSManagedValue。
QJSManagedValue::QJSManagedValue(QJSManagedValue &&other)
从其他移动构造QJSManagedValue。这将其他留在默认构造状态,其中它表示未定义的值,且不属于任何引擎。
[noexcept]
QJSManagedValue::~QJSManagedValue()
销毁QJSManagedValue。
注意:这会释放它所持有的JavaScript堆上的内存槽。你不能从不属于QJSEngine的线程的线程销毁QJSManagedValue。
QJSValue QJSManagedValue::call(const QJSValueList &arguments = {}) const
如果这个QJSManagedValue表示一个JavaScript FunctionObject,则使用给定的参数调用它并返回结果。否则返回JavaScript undefined
值。
参数必须是原始值或者是属于与这个QJSManagedValue相同QJSEngine的。否则调用不会执行,并将返回JavaScript undefined
值。
QJSValue QJSManagedValue::callAsConstructor(const QJSValueList &arguments = {}) const
如果这个QJSManagedValue表示一个JavaScript FunctionObject,则以给定的参数调用它作为构造函数并返回结果。否则返回JavaScript undefined
值。
参数必须是原始值或者是属于与这个QJSManagedValue相同QJSEngine的。否则调用不会执行,并将返回JavaScript undefined
值。
QJSValue QJSManagedValue::callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const
如果这个QJSManagedValue表示一个JavaScript FunctionObject,则在实例上使用给定的参数调用它并返回结果。否则返回JavaScript undefined
值。
参数和实例必须是原始值或者是属于与这个QJSManagedValue相同QJSEngine的。否则调用不会执行,并将返回JavaScript undefined
值。
bool QJSManagedValue::deleteProperty(const QString &name)
从QJSManagedValue中删除名称的属性。如果删除成功返回true
,否则返回false
。
bool QJSManagedValue::deleteProperty(quint32 arrayIndex)
从QJSManagedValue中删除arrayIndex处存储的值。如果删除成功返回true
,否则返回false
。
QJSEngine *QJSManagedValue::engine() const
返回此 QJSEngine 对应的 QJSManagedValue。请注意,除非 QJSManagedValue 是使用默认构造函数构造的或被移动,否则引擎始终有效。在后一种情况下,将返回 nullptr。
bool QJSManagedValue::equals(const QJSManagedValue &other) const
在此 QJSManagedValue 和 other 上调用 JavaScript 的 '==' 算子,并返回结果。
另请参阅strictlyEquals.
bool QJSManagedValue::hasOwnProperty(const QString &name) const
如果此 QJSManagedValue 有一个属性 name,则返回 true
,否则返回 false
。不考虑原型链上的属性。
bool QJSManagedValue::hasOwnProperty(quint32 arrayIndex) const
如果此 QJSManagedValue 有一个索引 arrayIndex,则返回 true
,否则返回 false
。不考虑原型链上的属性。
bool QJSManagedValue::hasProperty(const QString &name) const
如果此 QJSManagedValue 有一个属性 name,则返回 true
,否则返回 false
。考虑原型链上的属性。
bool QJSManagedValue::hasProperty(quint32 arrayIndex) const
如果此 QJSManagedValue 有一个索引 arrayIndex,则返回 true
,否则返回 false
。考虑原型链上的属性。
bool QJSManagedValue::isArray() const
如果此值代表一个 JavaScript 数组对象,则返回 true
,否则返回 false
。
bool QJSManagedValue::isBoolean() const
如果此 QJSManagedValue 的类型是 boolean
,则返回 true
,否则返回 false
。
bool QJSManagedValue::isDate() const
如果此值代表一个 JavaScript 日期对象,则返回 true
,否则返回 false
。
bool QJSManagedValue::isError() const
如果此值代表一个 JavaScript 错误对象,则返回 true
,否则返回 false
。
bool QJSManagedValue::isFunction() const
如果此 QJSManagedValue 的类型是 function
,则返回 true
;否则返回 false
。
bool QJSManagedValue::isInteger() const
如果此 QJSManagedValue 包含一个整数值,则返回 true
;否则返回 false
。数字的存储格式不会影响其上的任何操作的结果,但如果存储的是整数,则许多操作将更快。
bool QJSManagedValue::isNull() const
如果此 QJSManagedValue 包含 JavaScript 的 null
值,则返回 true
;否则返回 false
。
bool QJSManagedValue::isNumber() const
如果此 QJSManagedValue 的类型是 number
,则返回 true
;否则返回 false
。
bool QJSManagedValue::isObject() const
如果此 QJSManagedValue 的类型是 object
,则返回 true
;否则返回 false
。
bool QJSManagedValue::isQMetaObject() const
如果此值表示一个在 JavaScript 堆上管理的 QMetaObject 指针,则返回 true
;否则返回 false
。
bool QJSManagedValue::isQObject() const
如果此值表示一个在 JavaScript 堆上管理的 QObject 指针,则返回 true
;否则返回 false
。
bool QJSManagedValue::isRegularExpression() const
如果此值表示一个 JavaScript 正则表达式对象,则返回 true
;否则返回 false
。
bool QJSManagedValue::isString() const
如果此 QJSManagedValue 的类型是 string
,则返回 true
;否则返回 false
。
bool QJSManagedValue::isSymbol() const
如果此 QJSManagedValue 的类型是 symbol
,则返回 true
;否则返回 false
。
bool QJSManagedValue::isUndefined() const
如果此 QJSManagedValue 的类型是 undefined
,则返回 true
;否则返回 false
。
bool QJSManagedValue::isUrl() const
如果此值表示一个 JavaScript Url 对象,则返回 true
;否则返回 false
。
bool QJSManagedValue::isVariant() const
如果此值表示一个在 JavaScript 堆上管理的 QVariant,则返回 true
;否则返回 false
。
QJSValue QJSManagedValue::property(const QString &name) const
返回此 QJSManagedValue 的 name 属性。如果在实际对象上找不到属性,则将搜索原型链。
另见 setProperty。
QJSValue QJSManagedValue::property(quint32 arrayIndex) const
返回此 QJSManagedValue 中存储在 arrayIndex 的属性。如果在实际对象上找不到属性,则将搜索原型链。
QJSManagedValue QJSManagedValue::prototype() const
返回此 QJSManagedValue 的原型。这适用于任何值。例如,您可以从一个 boolean
值检索到 JavaScript boolean
原型。
另见 setPrototype。
void QJSManagedValue::setProperty(const QString &name, const QJSValue &value)
在 QJSManagedValue 上设置 name 属性为 value。这只能在 object
类型的 JavaScript 值上执行。此外,value 必须是原始值或与此值属于同一引擎。
另见 property。
void QJSManagedValue::setProperty(quint32 arrayIndex, const QJSValue &value)
在此 QJSManagedValue 中将 value 存储在 arrayIndex。这只能在 object
类型的 JavaScript 值上执行,并且如果不的是数组,则不建议这样做。此外,value 必须是原始值或与此值属于同一引擎。
void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)
将此 QJSManagedValue 的原型设置为 prototype。前提是 prototype 必须属于与 QJSManagedValue 相同的 QJSEngine,并且是一个对象(包括 null)。此外,这个 QJSManagedValue 也必须是一个对象(不包括 null),并且您不能创建原型循环。
另见 prototype。
bool QJSManagedValue::strictlyEquals(const QJSManagedValue &other) const
在 QJSManagedValue 和 other 上调用 JavaScript '===' 运算符,并返回结果。
另见 equals。
bool QJSManagedValue::toBoolean() const
将管理的值转换为布尔值。如果管理的值包含布尔值,则返回该值。否则,将按照 JavaScript 规则执行布尔转换。
QDateTime QJSManagedValue::toDateTime() const
如果这个 QJSManagedValue 包含一个 JavaScript 日期对象,则返回一个等效的 QDateTime。否则返回一个无效的实例。
int QJSManagedValue::toInteger() const
将托管值转换为整数。这首先通过 toNumber() 的规则将值转换为数字,然后根据规则将该参数强制转换为 JavaScript 位运算符的 32 位整数。
在内部,值可能已经存储为整数,这种情况下会采用快速路径。
注意:将托管值转换为数字可能会抛出异常。特别是,符号不能被强制转换为数字,或者自定义的 toString() 方法可能会抛出异常。在这种情况下,结果是 0,并且在转换后引擎携带一个错误。
注意:JavaScript 将数字强制转换为 32 位整数的规则不直观。
QJSValue QJSManagedValue::toJSValue() const
将此 QJSManagedValue 复制到新的 QJSValue。这比从 QJSManagedValue 移动构建一个 QJSValue 效率低,但保留了 QJSManagedValue。
double QJSManagedValue::toNumber() const
将托管值转换为数字。如果托管值包含一个数字,则返回该数字。否则执行 JavaScript 规则的数字强制转换。
注意:将托管值转换为数字可能会抛出异常。特别是,符号不能被强制转换为数字,或者自定义的 toString() 方法可能会抛出异常。在这种情况下,结果是 0,并且在转换后引擎携带一个错误。
QJSPrimitiveValue QJSManagedValue::toPrimitive() const
将托管值转换为 QJSPrimitiveValue。如果托管值包含 QJSPrimitiveValue 支持的类型,则复制该值。否则将值转换为字符串,并将该字符串存储在 QJSPrimitiveValue 中。
注意:将托管值转换为字符串可能会抛出异常。特别是,符号不能被强制转换为字符串,或者自定义的 toString() 方法可能会抛出异常。在这种情况下,结果是未定义值,并且在转换后引擎携带一个错误。
const QMetaObject *QJSManagedValue::toQMetaObject() const
如果这个 QJSManagedValue 包含一个 QMetaObject 指针,则返回它。否则返回 nullptr。
QObject *QJSManagedValue::toQObject() const
如果这个 QJSManagedValue 包含一个 QObject 指针,则返回它。否则返回 nullptr。
QRegularExpression QJSManagedValue::toRegularExpression() const
如果这个 QJSManagedValue 包含一个 JavaScript 正则表达式对象,则返回一个等效的 QRegularExpression。否则返回一个无效的实例。
QString QJSManagedValue::toString() const
将托管值转换为字符串。如果托管值包含一个字符串,则返回该字符串。否则执行 JavaScript 规则的字符串强制转换。
注意:将管理值转换为字符串可能会抛出异常。特别是,不能将符号强制转换为字符串,或者自定义的 toString() 方法可能会抛出异常。在这种情况下,结果是一个空字符串,并且引擎在转换后会有错误。
QUrl QJSManagedValue::toUrl() const
如果这个 QJSManagedValue 包含一个 JavaScript Url 对象,则返回一个等效的 QUrl。否则返回一个无效的。
QVariant QJSManagedValue::toVariant() const
将这个 QJSManagedValue 拷贝到一个新的 QVariant。如果 QJSManagedValue::isVariant() 返回 false,这也创建了一个有用的 QVariant。QVariant 可以包含 QJSManagedValue 所支持的任何类型。
QJSManagedValue::Type QJSManagedValue::type() const
返回这个 QJSManagedValue 的 JavaScript 类型。
QJSManagedValue &QJSManagedValue::operator=(QJSManagedValue &&other)
从 other 移动赋值一个 QJSManagedValue。这会使 other 处于默认构造状态,表示未定义,并且不属于任何引擎。
注意:这会释放这个 QJSManagedValue 在 JavaScript 堆上持有的内存槽位。你不得在不同线程上移动赋值一个 QJSManagedValue,而该 QJSEngine 位于相同的线程。
© 2024 Qt 公司。本文件中包含的文档贡献是各自所有者的版权。本文件提供的内容在 GNU 自由文档许可协议 1.3 版 的条款下获得许可,由自由软件基金会发布。Qt 以及相应的徽标是芬兰的 Qt 公司,以及其他全球国家/地区的 商标。所有其他商标属于其各自所有者。