Класс 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 происходит быстро.
Документация по типам членов
enum 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 содержит объект URL JavaScript, возвращает эквивалентный 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.1/qjsmanagedvalue.html