QJSValue类
QJSValue类充当Qt/JavaScript数据类型的容器。 更多...
头文件 | #include <QJSValue> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake | QT += qml |
公开类型
枚举 | ErrorType { GenericError, RangeError, ReferenceError, SyntaxError, TypeError, URIError } |
枚举 | ObjectConversionBehavior { ConvertJSObjects, RetainJSObjects } |
枚举 | SpecialValue { UndefinedValue, NullValue } |
公开函数
QJSValue(QJSValue::SpecialValue value = UndefinedValue) | |
QJSValue(bool value) | |
QJSValue(int value) | |
QJSValue(uint value) | |
QJSValue(double value) | |
QJSValue(const QString &value) | |
QJSValue(const QLatin1String &value) | |
QJSValue(const char *value) | |
QJSValue(const QJSValue &other) | |
QJSValue(QJSValue &&other) | |
~QJSValue() | |
QJSValue | call(const QJSValueList &args = QJSValueList()) const |
QJSValue | callAsConstructor(const QJSValueList &args = QJSValueList()) const |
QJSValue | callWithInstance(const QJSValue &instance, const QJSValueList &args = QJSValueList()) const |
bool | deleteProperty(const QString &name) |
bool | equals(const QJSValue &other) const |
QJSValue::ErrorType | errorType() const |
bool | hasOwnProperty(const QString &name) const |
bool | hasProperty(const QString &name) const |
bool | isArray() const |
bool | isBool() const |
bool | isCallable() const |
bool | isDate() const |
bool | isError() const |
bool | isNull() const |
bool | isNumber() const |
bool | isObject() const |
bool | isQMetaObject() const |
bool | isQObject() const |
bool | isRegExp() const |
bool | isString() const |
bool | isUndefined() const |
bool | isUrl() const |
bool | isVariant() const |
QJSValue | property(const QString &name) const |
QJSValue | property(quint32 arrayIndex) const |
QJSValue | prototype() const |
void | setProperty(const QString &name, const QJSValue &value) |
void | setProperty(quint32 arrayIndex, const QJSValue &value) |
void | setPrototype(const QJSValue &prototype) |
bool | strictlyEquals(const QJSValue &other) const |
bool | toBool() const |
QDateTime | toDateTime() const |
qint32 | toInt() const |
double | toNumber() const |
QJSPrimitiveValue | toPrimitive() const |
const QMetaObject * | toQMetaObject() const |
QObject * | toQObject() const |
QString | toString() const |
quint32 | toUInt() const |
QVariant | toVariant(QJSValue::ObjectConversionBehavior behavior) const |
QVariant | toVariant() const |
QJSValue & | operator=(QJSValue &&other) |
QJSValue & | operator=(const QJSValue &other) |
相关非成员
详细描述
QJSValue支持ECMA-262标准中定义的类型:原始类型,包括Undefined、Null、Boolean、Number和String;以及Object和Array类型。此外,还提供了对Qt/C++类型,如QVariant和QObject的内置支持。
对于基于对象的类型(包括Date和RegExp),使用QJSEngine中的newT()函数(例如QJSEngine::newObject())来创建所需类型的QJSValue。对于原始类型,使用QJSValue构造函数的重载之一。对于其他类型,例如已注册的小工具类型,例如QPoint,可以使用QJSEngine::toScriptValue。
名为isT()(例如isBool()、isUndefined())的方法可以用来测试一个值是否属于某个类型。名为toT()(例如toBool()、toString())的方法可以用来将QJSValue转换为其他类型。您还可以使用通用qjsvalue_cast()函数。
对象值具有零个或多个属性,这些属性本身也是QJSValue。使用setProperty()函数设置对象的属性,并调用property()函数以检索属性的值。
QJSEngine myEngine; QJSValue myObject = myEngine.newObject(); QJSValue myOtherObject = myEngine.newObject(); myObject.setProperty("myChild", myOtherObject); myObject.setProperty("name", "John Doe");
如果您想遍历脚本对象的所有属性,请使用QJSValueIterator类。
对象值有一个内部的prototype属性,可以使用prototype()和setPrototype()访问。
函数对象(对于 isCallable() 返回 true 的对象)可以通过调用 call() 方法来调用。构造函数可以用来通过调用 callAsConstructor() 构造新的对象。
使用 equals() 或 strictlyEquals() 来比较 QJSValue 与另一个值。
注意,对于 isObject() 返回 true 的 QJSValue,它只包含一个实际对象的引用;复制 QJSValue 将只会复制对象引用,而不是对象本身。如果你想要克隆一个对象(即复制一个对象的所有属性到另一个对象),你可以通过在脚本代码中帮助使用 for-in
语句,或在 C++ 中使用 QJSValueIterator。
与数组一起工作
要使用 QJSValue 创建数组,请使用 QJSEngine::newArray()
// Assumes that this class was declared in QML. QJSValue jsArray = engine->newArray(3);
要设置数组中的单个元素,请使用 setProperty(quint32 arrayIndex, const QJSValue &value) 重载。例如,要将上面的数组用整数填充
for (int i = 0; i < 3; ++i) { jsArray.setProperty(i, QRandomGenerator::global().generate()); }
要确定数组的长度,访问 "length" 属性。要访问数组元素,请使用 property(quint32 arrayIndex) 重载。以下代码将创建的数组读回到一个列表中
QVector<int> integers; const int length = jsArray.property("length").toInt(); for (int i = 0; i < length; ++i) { integers.append(jsArray.property(i).toInt()); }
转换为 JSON
可以将 QJSValue 转换为 JSON 类型。例如,要转换为数组,请使用 QJSEngine::fromScriptValue()
const QJsonValue jsonValue = engine.fromScriptValue<QJsonValue>(jsValue); const QJsonArray jsonArray = jsonValue.toArray();
另请参阅QJSEngine 和 QJSValueIterator。
成员类型文档
enum QJSValue::ErrorType
使用此枚举值来表示 JavaScript 语言特定的 Error 对象类型。
它们可能在模拟 C++ 中语言功能的时需要使用特殊异常类型时很有用。此外,它们可能有助于更清晰地传达某些典型条件,而不是抛出通用的 JavaScript 异常。例如,处理网络和资源定位符的代码可能发现使用 URIError 类型传播与损坏的定位符相关的错误很有用。
常量 | 值 | 描述 |
---|---|---|
QJSValue::GenericError | 1 | 一个通用的 Error 对象,但不是任何特定子类型。 |
QJSValue::RangeError | 3 | 一个值没有匹配预期的集合或范围。 |
QJSValue::ReferenceError | 4 | 引用了一个不存在的变量。 |
QJSValue::SyntaxError | 5 | 遇到不遵守语言语法的无效标记或标记序列。 |
QJSValue::TypeError | 6 | 操作数或参数与预期的类型不兼容。 |
QJSValue::URIError | 7 | URI 处理函数使用不当或提供的 URI 是无效的。 |
enum QJSValue::ObjectConversionBehavior
此枚举用于指定在将 JavaScript 对象和符号转换为 QVariant 时应该如何处理没有等效本地 Qt 类型的对象。
常量 | 值 | 描述 |
---|---|---|
QJSValue::ConvertJSObjects | 0 | 尝试执行最佳努力转换,可能会丢失数据。符号转换为 QString。 |
QJSValue::RetainJSObjects | 1 | 值保留为包含在 QVariant 中以 QJSValue 封装的 QJSValue。 |
enum QJSValue::SpecialValue
此枚举用于指定单一值类型。
常量 | 值 | 描述 |
---|---|---|
QJSValue::UndefinedValue | 1 | 一个未定义的值。 |
QJSValue::NullValue | 0 | 一个空值。 |
成员函数文档
QJSValue::QJSValue(QJSValue::SpecialValue value = UndefinedValue)
构造一个包含特殊值的 QJSValue 对象。
QJSValue::QJSValue(bool value)
构造一个包含布尔值的 QJSValue 对象。
QJSValue::QJSValue(int value)
构造一个包含数字值的 QJSValue 对象。
QJSValue::QJSValue(uint value)
构造一个包含数字值的 QJSValue 对象。
QJSValue::QJSValue(double value)
构造一个包含数字值的 QJSValue 对象。
QJSValue::QJSValue(const QString &value)
构造一个包含字符串值的 QJSValue 对象。
QJSValue::QJSValue(const QLatin1String &value)
构造一个包含字符串值的 QJSValue 对象。
QJSValue::QJSValue(const char *value)
构造一个包含字符串值的 QJSValue 对象。
QJSValue::QJSValue(const QJSValue &other)
构造一个新的 QJSValue 对象,它是 other 的副本。
注意,如果 other 是一个对象(即,isObject() 返回 true),则仅复制底层对象的引用到新的脚本值中(即对象本身不会被复制)。
QJSValue::QJSValue(QJSValue &&other)
移动构造函数。将从 other 移入此 QJSValue 对象。
[noexcept]
QJSValue::~QJSValue()
销毁此 QJSValue。
QJSValue QJSValue::call(const QJSValueList &args = QJSValueList()) const
将此 QJSValue 作为函数调用,将 args 作为参数传递给函数,并使用 globalObject() 作为 "this" 对象。返回函数返回的值。
如果此 QJSValue 不可调用,call() 不做任何事情并返回一个未定义的 QJSValue。
调用 call() 可能会导致脚本引擎抛出异常;在这种情况下,call() 返回抛出的值(通常是 Error
对象)。您可以在返回值上调用 isError() 来确定是否发生异常。
另请参阅 isCallable(),callWithInstance() 和 callAsConstructor()。
QJSValue QJSValue::callAsConstructor(const QJSValueList &args = QJSValueList()) const
创建一个新的