Класс QJSValue
Класс QJSValue служит контейнером для типов данных Qt/JavaScript. Подробнее...
| Заголовок: | #include <QJSValue> |
| qmake: | QT += qml |
| С версии: | Qt 5.0 |
Открытые типы
| Перечисление | SpecialValue { UndefinedValue, NullValue } |
Открытые функции
| QJSValue(SpecialValue value = UndefinedValue) | |
| QJSValue(const QJSValue &other) | |
| QJSValue(QJSValue &&other) | |
| 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(QV4::ExecutionEngine *e, quint64 val) | |
| ~QJSValue() | |
| QJSValue | call(const QJSValueList &args = QJSValueList()) |
| QJSValue | callAsConstructor(const QJSValueList &args = QJSValueList()) |
| QJSValue | callWithInstance(const QJSValue &instance, const QJSValueList &args = QJSValueList()) |
| bool | deleteProperty(const QString &name) |
| bool | equals(const QJSValue &other) 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 | isQObject() const |
| bool | isRegExp() const |
| bool | isString() const |
| bool | isUndefined() 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 |
| QObject * | toQObject() const |
| QString | toString() const |
| quint32 | toUInt() const |
| QVariant | toVariant() const |
| QJSValue & | operator=(QJSValue &&other) |
| QJSValue & | operator=(const QJSValue &other) |
Подробное описание
Класс QJSValue служит контейнером для типов данных Qt/JavaScript.
QJSValue поддерживает типы, определённые в стандарте ECMA-262: примитивные типы (Undefined, Null, Boolean, Number и String), а также тип Object. Кроме того, обеспечивается встроенная поддержка типов Qt/C++, таких как QVariant и QObject.
Для типов, основанных на объектах (включая Date и RegExp), используйте функции newT() в QJSEngine (например, QJSEngine::newObject()), чтобы создать QJSValue нужного типа. Для примитивных типов используйте один из перегруженных конструкторов QJSValue.
Методы с именем isT() (например, isBool(), isUndefined() ) можно использовать для проверки, является ли значение определённого типа. Методы с именем toT() (например, toBool(), toString() ) можно использовать для преобразования QJSValue в другой тип. Также можно использовать общую функцию QJSValue_cast().
Значения объектов имеют ноль или более свойств, которые сами являются QJSValues. Используйте 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().
Для сравнения QJSValue с другим значением используйте equals() или strictlyEquals().
Обратите внимание, что QJSValue, для которого isObject() возвращает true, содержит только ссылку на фактический объект; копирование QJSValue скопирует только ссылку на объект, а не сам объект. Если вы хотите клонировать объект (т.е. скопировать свойства объекта в другой объект), вы можете сделать это с помощью оператора for-in в коде скрипта или QJSValueIterator в C++.
См. также QJSEngine и QJSValueIterator.
Документация по типам членов
enum QJSValue::SpecialValue
Этот перечисление используется для указания типа с единственным значением.
| Константа | Значение | Описание |
|---|---|---|
QJSValue::UndefinedValue |
1 |
Неопределённое значение. |
QJSValue::NullValue |
0 |
Значение null. |
Документация по функциям-членам
QJSValue::QJSValue(SpecialValue value = UndefinedValue)
Создаёт новый QJSValue со специальным значением value.
QJSValue::QJSValue(const QJSValue &other)
Создаёт новый QJSValue, являющийся копией other.
Обратите внимание, что если other — объект (т.е., isObject() вернёт true), то в новое значение скрипта копируется только ссылка на подлежащий объект (т.е., сам объект не копируется).
QJSValue::QJSValue(QJSValue &&other)
Конструктор перемещения. Перемещает данные из other в этот объект QJSValue.
QJSValue::QJSValue(bool value)
Создаёт новый QJSValue с булевым значением value.
QJSValue::QJSValue(int value)
Создаёт новый QJSValue с числовым значением value.
QJSValue::QJSValue(uint value)
Создаёт новый QJSValue с числовым значением value.
QJSValue::QJSValue(double value)
Создаёт новый QJSValue с числовым значением value.
QJSValue::QJSValue(const QString &value)
Создаёт новый QJSValue со строковым значением value.
QJSValue::QJSValue(const QLatin1String &value)
Создаёт новый QJSValue со строковым значением value.
QJSValue::QJSValue(const char *value)
Создаёт новый QJSValue со строковым значением value.
QJSValue::QJSValue(QV4::ExecutionEngine *e, quint64 val)
Инициализирует экземпляр QJSValue по умолчанию.
QJSValue::~QJSValue()
Уничтожает этот QJSValue.
QJSValue QJSValue::call(const QJSValueList &args = QJSValueList())
Вызывает этот QJSValue как функцию, передавая args в качестве аргументов функции и используя globalObject() в качестве объекта «this». Возвращает значение, возвращённое функцией.
Если этот QJSValue не вызываемая функция, call() ничего не делает и возвращает неопределённый QJSValue.
Вызов call() может вызвать исключение в движке скриптов; в этом случае call() возвращает значение, которое было выброшено (обычно объект Error). Вы можете вызвать isError() на возвращаемом значении, чтобы определить, произошло ли исключение.
См. также isCallable(), callWithInstance(), и callAsConstructor().
QJSValue QJSValue::callAsConstructor(const QJSValueList &args = QJSValueList())
Создаёт новый Object и вызывает этот QJSValue как конструктор, используя созданный объект как объект `this' и передавая args в качестве аргументов. Если возвращаемое значение вызова конструктора является объектом, то возвращается этот объект; в противном случае возвращается объект, созданный по умолчанию.
Если этот QJSValue не является функцией, callAsConstructor() ничего не делает и возвращает неопределённый QJSValue.
Вызов этой функции может вызвать исключение в движке скриптов; в этом случае возвращается значение, которое было выброшено (обычно объект Error). Вы можете вызвать isError() на возвращаемом значении, чтобы определить, произошло ли исключение.
См. также call() и QJSEngine::newObject().
QJSValue QJSValue::callWithInstance(const QJSValue &instance, const QJSValueList &args = QJSValueList())
Вызывает этот QJSValue как функцию, используя instance в качестве объекта `this' в вызове функции и передавая args в качестве аргументов функции. Возвращает значение, возвращённое функцией.
Если этот QJSValue не является функцией, call() ничего не делает и возвращает неопределённый QJSValue.
Обратите внимание, что если instance не является объектом, то в качестве объекта `this' будет использоваться глобальный объект (см. QJSEngine::globalObject()).
Вызов call() может вызвать исключение в движке скриптов; в этом случае call() возвращает значение, которое было выброшено (обычно объект Error). Вы можете вызвать isError() на возвращаемом значении, чтобы определить, произошло ли исключение.
См. также call().
bool QJSValue::deleteProperty(const QString &name)
Попытка удалить свойство этого объекта с заданным именем name. Возвращает true, если свойство было удалено, в противном случае возвращает false.
Поведение этой функции соответствует поведению оператора delete в JavaScript. В частности:
- Ненастраиваемые свойства удалить нельзя.
- Функция вернёт true, даже если у этого объекта нет свойства с заданным именем (т.е., несуществующие свойства «тривиально удаляемы»).
- Если у этого объекта нет собственного свойства с заданным именем, но есть такое свойство у объекта в цепочке prototype(), то свойство объекта прототипа не удаляется, и функция вернёт true.
См. также setProperty() и hasOwnProperty().
bool QJSValue::equals(const QJSValue &other) const
Возвращает true, если этот QJSValue равен other, в противном случае возвращает false. Сравнение выполняется в соответствии с поведением, описанным в разделе 11.9.3 спецификации ECMA-262 «Алгоритм абстрактного равенства».
Эта функция может возвращать true, даже если тип этого QJSValue отличается от типа значения other; т.е. сравнение не строгое. Например, сравнение числа 9 со строкой "9" возвращает true; сравнение undefined с null возвращает true; сравнение объекта Number с примитивным значением 6 с объектом String с примитивным значением "6" возвращает true; и сравнение числа 1 с булевым значением true возвращает true. Если вы хотите выполнить сравнение без такой неявной конвертации значений, используйте strictlyEquals().
Обратите внимание, что если этот QJSValue или значение other являются объектами, вызов этой функции вызывает побочные эффекты в движке скриптов, поскольку движок вызовет функцию valueOf() объекта (и, возможно, toString()), пытаясь преобразовать объект в примитивное значение (что может привести к необработанному исключению скрипта).
См. также strictlyEquals().
bool QJSValue::hasOwnProperty(const QString &name) const
Возвращает true, если у этого объекта есть собственное (не унаследованное от прототипа) свойство с заданным именем name, в противном случае возвращает false.
См. также property() и hasProperty().
END_OF_DOCUMENT_MARKERbool QJSValue::hasProperty(const QString &name) const
Возвращает true, если у этого объекта есть свойство с заданным именем name, в противном случае возвращает false.
См. также property() и hasOwnProperty().
bool QJSValue::isArray() const
Возвращает true, если это QJSValue является объектом класса Array; в противном случае возвращает false.
См. также QJSEngine::newArray().
bool QJSValue::isBool() const
Возвращает true, если это QJSValue имеет примитивный тип Boolean; в противном случае возвращает false.
См. также toBool().
bool QJSValue::isCallable() const
Возвращает true, если это QJSValue можно вызвать как функцию, в противном случае возвращает false.
См. также call().
bool QJSValue::isDate() const
Возвращает true, если это QJSValue является объектом класса Date; в противном случае возвращает false.
bool QJSValue::isError() const
Возвращает true, если это QJSValue является объектом класса Error; в противном случае возвращает false.
См. также QJSEngine - Ошибки скрипта.
bool QJSValue::isNull() const
Возвращает true, если это QJSValue имеет примитивный тип Null; в противном случае возвращает false.
bool QJSValue::isNumber() const
Возвращает true, если это QJSValue имеет примитивный тип Number; в противном случае возвращает false.
См. также toNumber().
bool QJSValue::isObject() const
Возвращает true, если это QJSValue имеет тип Object; в противном случае возвращает false.
Обратите внимание, что значения функций, значения переменных и значения QObject являются объектами, поэтому эта функция возвращает true для таких значений.
См. также QJSEngine::newObject().
bool QJSValue::isQObject() const
Возвращает true, если это QJSValue является объектом QObject; в противном случае возвращает false.
Примечание: Эта функция возвращает true даже если QObject, который оборачивает это QJSValue, был удалён.
См. также toQObject() и QJSEngine::newQObject().
bool QJSValue::isRegExp() const
Возвращает true, если это QJSValue является объектом класса RegExp; в противном случае возвращает false.
bool QJSValue::isString() const
Возвращает true, если это QJSValue имеет примитивный тип String; в противном случае возвращает false.
См. также toString().
bool QJSValue::isUndefined() const
Возвращает true, если это QJSValue имеет примитивный тип Undefined; в противном случае возвращает false.
bool QJSValue::isVariant() const
Возвращает true, если это QJSValue является значением типа variant; в противном случае возвращает false.
См. также toVariant().
QJSValue QJSValue::property(const QString &name) const
Возвращает значение свойства этого QJSValue с заданным именем name. Если такое свойство не существует, возвращается неопределённое QJSValue.
Если свойство реализовано с помощью функции-геттера (т.е. установлено флаг PropertyGetter), вызов property() имеет побочные эффекты в отношении движка скриптов, так как будет вызвана функция-геттер (что может привести к необработанному исключению скрипта). Если произошло исключение, property() возвращает сгенерированное значение (обычно объект Error).
См. также setProperty(), hasProperty() и QJSValueIterator.
QJSValue QJSValue::property(quint32 arrayIndex) const
Это перегруженная функция.
Возвращает свойство по заданному arrayIndex.
Эта функция предоставлена для удобства и производительности при работе с массивами.
Если это QJSValue не является объектом Array, эта функция ведет себя так, как будто был вызван property() со строковым представлением arrayIndex.
QJSValue QJSValue::prototype() const
Если это QJSValue является объектом, возвращает внутренний прототип (свойство __proto__) этого объекта; в противном случае возвращает неопределённое QJSValue.
См. также setPrototype() и isObject().
void QJSValue::setProperty(const QString &name, const QJSValue &value)
Устанавливает значение свойства этого QJSValue с заданным именем name на заданное value.
Если это QJSValue не является объектом, эта функция ничего не делает.
Если у этого QJSValue ещё нет свойства с именем name, создаётся новое свойство.
См. также property() и deleteProperty().
void QJSValue::setProperty(quint32 arrayIndex, const QJSValue &value)
Это перегруженная функция.
Устанавливает свойство по заданному arrayIndex на заданное value.
Эта функция предоставлена для удобства и производительности при работе с массивами.
Если это QJSValue не является объектом Array, эта функция ведет себя так, как будто был вызван setProperty() со строковым представлением arrayIndex.
void QJSValue::setPrototype(const QJSValue &prototype)
Если это QJSValue является объектом, устанавливает внутренний прототип (свойство __proto__) этого объекта в prototype; если QJSValue равно null, устанавливает прототип в null; в противном случае ничего не делает.
Внутренний прототип не следует путать с публичным свойством с именем «prototype»; публичный прототип обычно устанавливается только для функций, которые действуют как конструкторы.
См. также prototype() и isObject().
bool QJSValue::strictlyEquals(const QJSValue &other) const
Возвращает true, если это QJSValue равно other при строгом сравнении (без преобразования), в противном случае возвращает false. Сравнение соответствует поведению, описанному в ECMA-262 разделе 11.9.6, «Алгоритм строгого сравнения».
Если тип этого QJSValue отличается от типа значения other, эта функция возвращает false. Если типы равны, результат зависит от типа, как показано в следующей таблице:
| Тип | Результат |
|---|---|
| Undefined | true |
| Null | true |
| Boolean | true, если оба значения равны true, иначе false |
| Number | false, если одно из значений равно NaN (Not-a-Number); true, если значения равны, иначе false |
| String | true, если обе последовательности символов точно совпадают, иначе false |
| Object | true, если оба значения ссылаются на один и тот же объект, иначе false |
См. также equals().
bool QJSValue::toBool() const
Возвращает булево значение этого QJSValue, используя правила преобразования, описанные в ECMA-262 разделе 9.2, «ToBoolean».
Обратите внимание, что если это QJSValue является объектом, вызов этой функции имеет побочные эффекты в отношении движка скриптов, так как движок вызовет функцию valueOf() объекта (и, возможно, toString()) для попытки преобразовать объект в примитивное значение (что может привести к необработанному исключению скрипта).
См. также isBool().
QDateTime QJSValue::toDateTime() const
Возвращает представление QDateTime этого значения в местном времени. Если это QJSValue не является датой или значение даты равно NaN (Not-a-Number), возвращается недействительная QDateTime.
См. также isDate().
qint32 QJSValue::toInt() const
Возвращает значение целого 32-битного числа со знаком этого QJSValue, используя правила преобразования, описанные в разделе ECMA-262 раздел 9.5, «ToInt32».
Обратите внимание, что если этот QJSValue является объектом, вызов этой функции имеет побочные эффекты для движка сценариев, поскольку движок вызовет функцию valueOf() объекта (и, возможно, toString()), пытаясь преобразовать объект в примитивное значение (что может привести к необработанному исключению сценария).
См. также toNumber() и toUInt().
double QJSValue::toNumber() const
Возвращает числовое значение этого QJSValue, как определено в разделе ECMA-262 9.3, «ToNumber».
Обратите внимание, что если этот QJSValue является объектом, вызов этой функции имеет побочные эффекты для движка сценариев, поскольку движок вызовет функцию valueOf() объекта (и, возможно, toString()), пытаясь преобразовать объект в примитивное значение (что может привести к необработанному исключению сценария).
См. также isNumber(), toInt() и toUInt().
QObject *QJSValue::toQObject() const
Если этот QJSValue является QObject, возвращает указатель на QObject, который представляет QJSValue; в противном случае возвращает 0.
Если QObject, обернутый этим QJSValue, был удален, эта функция возвращает 0 (т. е. возможно, что toQObject() вернёт 0, даже когда isQObject() возвращает true).
См. также isQObject().
QString QJSValue::toString() const
Возвращает строковое значение этого QJSValue, как определено в разделе ECMA-262 9.8, «ToString».
Обратите внимание, что если этот QJSValue является объектом, вызов этой функции имеет побочные эффекты для движка сценариев, поскольку движок вызовет функцию toString() объекта (и, возможно, valueOf()) в попытке преобразовать объект в примитивное значение (что может привести к необработанному исключению сценария).
См. также isString().
quint32 QJSValue::toUInt() const
Возвращает значение беззнакового 32-битного целого числа этого QJSValue, используя правила преобразования, описанные в разделе ECMA-262 раздел 9.6, «ToUint32».
Обратите внимание, что если этот QJSValue является объектом, вызов этой функции имеет побочные эффекты для движка сценариев, поскольку движок вызовет функцию valueOf() объекта (и, возможно, toString()), пытаясь преобразовать объект в примитивное значение (что может привести к необработанному исключению сценария).
См. также toNumber() и toInt().
QVariant QJSValue::toVariant() const
Возвращает значение QVariant этого QJSValue, если оно может быть преобразовано в QVariant; в противном случае возвращает недействительный QVariant. Преобразование выполняется в соответствии со следующей таблицей:
| Тип входных данных | Результат |
|---|---|
| Undefined | Недействительный QVariant. |
| Null | QVariant, содержащий нулевой указатель (QMetaType::VoidStar). |
| Boolean | QVariant, содержащий значение булевого типа. |
| Число | QVariant, содержащий значение числа. |
| Строка | QVariant, содержащий значение строки. |
| Объект QVariant | Результат — значение QVariant объекта (без преобразования). |
| Объект QObject | QVariant, содержащий указатель на QObject. |
| Объект Date | QVariant, содержащий значение даты (toDateTime()). |
| Объект RegExp | QVariant, содержащий значение регулярного выражения. |
| Объект Array | Массив преобразуется в QVariantList. Каждый элемент преобразуется в QVariant рекурсивно; циклические ссылки не отслеживаются. |
| Объект | Объект преобразуется в QVariantMap. Каждая свойство преобразуется в QVariant рекурсивно; циклические ссылки не отслеживаются. |
См. также isVariant().
QJSValue &QJSValue::operator=(QJSValue &&other)
Перемещает присваивание other этому объекту QJSValue.
QJSValue &QJSValue::operator=(const QJSValue &other)
Присваивает значение other этому QJSValue.
Обратите внимание, что если other — это объект (isObject() возвращает true), присваивается только ссылка на базовый объект; сам объект не копируется.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qjsvalue.html