Класс QJSManagedValue
QJSManagedValue представляет значение на куче JavaScript, принадлежащее QJSEngine. Подробнее...
| Заголовок: | #include <QJSManagedValue> |
| CMake: | find_package(Qt6 COMPONENTS Qml REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
| С момента: | Qt 6.1 |
Открытые типы
| перечисление | Тип { Неопределённое, Логическое, Числовое, Строковое, Объект, …, Функция } |
Открытые функции
| QJSManagedValue(QJSManagedValue &&other) | |
| QJSManagedValue(const QString &string, QJSEngine *engine) | |
| QJSManagedValue(const QVariant &variant, QJSEngine *engine) | |
| QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine) | |
| QJSManagedValue(QJSValue value, QJSEngine *engine) | |
| QJSManagedValue() | |
| QJSManagedValue & | operator=(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 позволяет взаимодействовать со значениями JavaScript практически всеми способами, которые доступны при взаимодействии с ними из JavaScript. Вы можете получать и устанавливать свойства и прототипы, а также обращаться к массивам. Дополнительно, вы можете преобразовать значение в эквиваленты Qt-объектов JavaScript. Например, объект 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().
Документация по функциям-членам
QJSManagedValue::QJSManagedValue(QJSManagedValue &&other)
Перемещает конструктор QJSManagedValue из other. Это оставляет other в состоянии, созданном по умолчанию, где он представляет неопределенное значение и не принадлежит ни одному движку.
QJSManagedValue::QJSManagedValue(const QString &string, QJSEngine *engine)
Создает QJSManagedValue из string, используя кучу engine.
QJSManagedValue::QJSManagedValue(const QVariant &variant, QJSEngine *engine)
Создает QJSManagedValue из variant, используя кучу engine.
QJSManagedValue::QJSManagedValue(const QJSPrimitiveValue &value, QJSEngine *engine)
Создаёт QJSManagedValue из value, используя кучу engine.
QJSManagedValue::QJSManagedValue(QJSValue value, QJSEngine *engine)
Создает QJSManagedValue из value, используя кучу engine. Если value само управляемое и движок, к которому оно принадлежит, не engine, результатом является значение undefined, и генерируется предупреждение.
QJSManagedValue::QJSManagedValue()
Создает QJSManagedValue, представляющий значение JavaScript undefined. Это единственное значение, не хранящееся в куче JavaScript. Вызов engine() на QJSManagedValue, созданном по умолчанию, вернет nullptr.
QJSManagedValue &QJSManagedValue::operator=(QJSManagedValue &&other)
Перемещает присваивание QJSManagedValue из other. Это оставляет other в состоянии, созданном по умолчанию, где он представляет неопределенное значение и не принадлежит ни одному движку.
Примечание: Это освобождает слот памяти, который содержит этот QJSManagedValue в куче JavaScript. Вы не должны перемещать присваивание QJSManagedValue в другом потоке, чем тот, в котором находится QJSEngine, к которому он принадлежит.
QJSManagedValue::~QJSManagedValue()
Уничтожает QJSManagedValue.
Примечание: Это освобождает слот памяти, который он содержит в куче JavaScript. Вы не должны уничтожать QJSManagedValue из другого потока, чем тот, в котором находится QJSEngine, к которому он принадлежит.
QJSValue QJSManagedValue::call(const QJSValueList &arguments = {}) const
Если этот QJSManagedValue представляет собой JavaScript FunctionObject, вызывает его с заданными arguments и возвращает результат. В противном случае возвращает значение JavaScript undefined.
arguments должны быть либо примитивными значениями, либо принадлежать тому же QJSEngine, что и этот QJSManagedValue. В противном случае вызов не выполняется, и возвращается значение JavaScript undefined.
QJSValue QJSManagedValue::callAsConstructor(const QJSValueList &arguments = {}) const
Если этот QJSManagedValue представляет собой JavaScript FunctionObject, вызывает его как конструктор с заданными arguments и возвращает результат. В противном случае возвращает значение JavaScript undefined.
arguments должны быть либо примитивными значениями, либо принадлежать тому же QJSEngine, что и этот QJSManagedValue. В противном случае вызов не выполняется, и возвращается значение JavaScript undefined.
QJSValue QJSManagedValue::callWithInstance(const QJSValue &instance, const QJSValueList &arguments = {}) const
Если этот QJSManagedValue представляет собой JavaScript FunctionObject, вызывает его на instance с заданными arguments и возвращает результат. В противном случае возвращает значение JavaScript undefined.
arguments и instance должны быть либо примитивными значениями, либо принадлежать тому же QJSEngine, что и этот QJSManagedValue. В противном случае вызов не выполняется, и возвращается значение JavaScript undefined.
bool QJSManagedValue::deleteProperty(const QString &name)
Удаляет свойство name из этого QJSManagedValue. Возвращает true , если удаление успешно, или false в противном случае.
bool QJSManagedValue::deleteProperty(quint32 arrayIndex)
Удаляет значение, хранящееся в arrayIndex, из этого QJSManagedValue. Возвращает true , если удаление успешно, или false в противном случае.
QJSEngine *QJSManagedValue::engine() const
Возвращает QJSEngine, к которому принадлежит этот QJSManagedValue. Обратите внимание, что движок всегда действителен, если только QJSManagedValue не создан по умолчанию или не перемещен. В последнем случае возвращается nullptr.
bool QJSManagedValue::equals(const QJSManagedValue &other) const
Вызывает оператор JavaScript '==' для этого QJSManagedValue и other и возвращает результат.
См. также strictlyEquals.
bool QJSManagedValue::hasOwnProperty(const QString &name) const
Возвращает true , если у этого QJSManagedValue есть свойство name, в противном случае возвращает false. Свойства цепочки прототипов не учитываются.
bool QJSManagedValue::hasOwnProperty(quint32 arrayIndex) const
Возвращает true если у этого QJSManagedValue есть индекс массива arrayIndex, в противном случае возвращает false. Свойства цепочки прототипов не учитываются.
bool QJSManagedValue::hasProperty(const QString &name) const
Возвращает true если у этого QJSManagedValue есть свойство name, в противном случае возвращает false. Свойства цепочки прототипов учитываются.
bool QJSManagedValue::hasProperty(quint32 arrayIndex) const
Возвращает true если у этого QJSManagedValue есть индекс массива arrayIndex, в противном случае возвращает false. Свойства цепочки прототипов учитываются.
bool QJSManagedValue::isArray() const
Возвращает true если это значение представляет собой объект JavaScript Array, или false в противном случае.
bool QJSManagedValue::isBoolean() const
Возвращает true если тип этого QJSManagedValue является boolean, или false в противном случае.
bool QJSManagedValue::isDate() const
Возвращает true если это значение представляет собой объект JavaScript Date, или false в противном случае.
bool QJSManagedValue::isError() const
Возвращает true если это значение представляет собой объект JavaScript Error, или false в противном случае.
bool QJSManagedValue::isFunction() const
Возвращает true если тип этого QJSManagedValue является function, false в противном случае.
bool QJSManagedValue::isInteger() const
Возвращает true если этот QJSManagedValue содержит целое число, или false в противном случае. Формат хранения числа не влияет на результаты операций с ним, но если число целочисленное, то многие операции выполняются быстрее.
bool QJSManagedValue::isNull() const
Возвращает true если этот QJSManagedValue содержит значение JavaScript null, или false в противном случае.
bool QJSManagedValue::isNumber() const
Возвращает true если тип этого QJSManagedValue является number, или false в противном случае.
bool QJSManagedValue::isObject() const
Возвращает true если тип этого QJSManagedValue является object, или false в противном случае.
bool QJSManagedValue::isQMetaObject() const
Возвращает true если это значение представляет собой указатель QMetaObject, управляемый в куче JavaScript, или false в противном случае.
bool QJSManagedValue::isQObject() const
Возвращает true если это значение представляет собой указатель QObject, управляемый в куче JavaScript, или false в противном случае.
bool QJSManagedValue::isRegularExpression() const
Возвращает true если это значение представляет собой объект JavaScript регулярного выражения, или false в противном случае.
bool QJSManagedValue::isString() const
Возвращает true если тип этого QJSManagedValue является string, или false в противном случае.
bool QJSManagedValue::isSymbol() const
Возвращает true если тип этого QJSManagedValue является symbol, или false в противном случае.
bool QJSManagedValue::isUndefined() const
Возвращает true если тип этого QJSManagedValue является undefined, или false в противном случае.
bool QJSManagedValue::isUrl() const
Возвращает true если это значение представляет собой объект JavaScript Url, или false в противном случае.
bool QJSManagedValue::isVariant() const
Возвращает true если это значение представляет собой QVariant, управляемый в куче JavaScript, или false в противном случае.
QJSValue QJSManagedValue::property(const QString &name) const
Возвращает свойство name этого QJSManagedValue. Если свойство не найдено в объекте, выполняется поиск по цепочке прототипов.
См. также setProperty().
QJSValue QJSManagedValue::property(quint32 arrayIndex) const
Возвращает свойство, хранящееся в arrayIndex этого QJSManagedValue. Если свойство не найдено в объекте, выполняется поиск по цепочке прототипов.
QJSManagedValue QJSManagedValue::prototype() const
Возвращает прототип для этого QJSManagedValue. Это работает с любым значением. Например, можно получить прототип JavaScript boolean из значения boolean.
См. также setPrototype().
void QJSManagedValue::setProperty(const QString &name, const QJSValue &value)
Устанавливает свойство name в значение value для этого QJSManagedValue. Это можно сделать только для значений JavaScript типа object. Кроме того, value должно быть либо примитивным типом, либо принадлежать тому же движку, что и это значение.
См. также property().
void QJSManagedValue::setProperty(quint32 arrayIndex, const QJSValue &value)
Хранит value по индексу arrayIndex в этом QJSManagedValue. Это можно сделать только для значений JavaScript типа object, и не рекомендуется, если значение не является массивом. Кроме того, value должно быть либо примитивным типом, либо принадлежать тому же движку, что и это значение.
void QJSManagedValue::setPrototype(const QJSManagedValue &prototype)
Устанавливает прототип этого QJSManagedValue в prototype. Условие – prototype принадлежит тому же QJSEngine, что и этот QJSManagedValue, и является объектом (включая null). Кроме того, этот QJSManagedValue тоже должен быть объектом (исключая null), и нельзя создавать циклы прототипов.
См. также prototype().
bool QJSManagedValue::strictlyEquals(const QJSManagedValue &other) const
Вызывает оператор JavaScript '===' для этого QJSManagedValue и other и возвращает результат.
См. также equals.
bool QJSManagedValue::toBoolean() const
Преобразует управляемое значение в булево. Если управляемое значение содержит булево, то возвращается это значение. В противном случае выполняется преобразование в булево по правилам JavaScript.
QDateTime QJSManagedValue::toDateTime() const
Если этот QJSManagedValue содержит объект JavaScript Date, возвращает эквивалентное QDateTime. В противном случае возвращает недействительное значение.
int QJSManagedValue::toInteger() const
Преобразует управляемое значение в целое число. Сначала значение преобразуется в число по правилам toNumber(), а затем ограничено диапазоном целых чисел по правилам, заданным для приведения аргументов к операторам битового сдвига JavaScript в 32-битные целые числа.
Внутренне значение может уже храниться как целое число, в этом случае используется быстрый путь.
Примечание: Преобразование управляемого значения в число может вызвать исключение. В частности, символы не могут быть преобразованы в числа, или метод valueOf() может вызвать исключение. В этом случае результат равен 0, а движок получает ошибку после преобразования.
Примечание: Правила JavaScript для преобразования чисел в 32-битные целые числа неинтуитивны.
QJSValue QJSManagedValue::toJSValue() const
Копирует этот QJSManagedValue в новый QJSValue. Это менее эффективно, чем создание QJSValue из QJSManagedValue с использованием перемещения, но сохраняет QJSManagedValue.
double QJSManagedValue::toNumber() const
Преобразует управляемое значение в число. Если управляемое значение содержит число, возвращает это число. В противном случае выполняется приведение к числу по правилам JavaScript.
Примечание: Преобразование управляемого значения в число может вызвать исключение. В частности, символы не могут быть приведены к числам, или пользовательский метод valueOf() может вызвать исключение. В этом случае результат равен 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. Это также создает полезный QVariant, если QJSManagedValue::isVariant() возвращает false. QVariant может содержать все типы, поддерживаемые QJSManagedValue.
QJSManagedValue::Type QJSManagedValue::type() const
Возвращает тип JavaScript этого QJSManagedValue.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qjsmanagedvalue.html