7#include <QtCore/qmetatype.h>
9#include <QtCore/qvariant.h>
10#include <QtCore/qsharedpointer.h>
11#include <QtCore/qobject.h>
12#include <QtCore/qtimezone.h>
13#include <QtQml/qjsvalue.h>
14#include <QtQml/qjsmanagedvalue.h>
15#include <QtQml/qqmldebug.h>
28 Q_PROPERTY(
QString uiLanguage READ uiLanguage WRITE setUiLanguage NOTIFY uiLanguageChanged)
52 return newQMetaObject(&T::staticMetaObject);
66 return createManaged(QMetaType::fromType<T>(), &
value);
73 if constexpr (std::disjunction_v<
75 std::is_same<T, bool>,
76 std::is_same<T, double>,
77 std::is_same<T, QString>>) {
80 return createPrimitive(QMetaType::fromType<T>(), &
value);
87 return qjsvalue_cast<T>(
value);
93 return qjsvalue_cast<T>(
value);
99 if constexpr (std::is_same_v<T, int>)
100 return value.toInteger();
101 if constexpr (std::is_same_v<T, bool>)
102 return value.toBoolean();
103 if constexpr (std::is_same_v<T, double>)
104 return value.toDouble();
105 if constexpr (std::is_same_v<T, QString>)
106 return value.toString();
107 if constexpr (std::is_same_v<T, QVariant>)
108 return value.toVariant();
109 if constexpr (std::is_pointer_v<T>)
111 return qjsvalue_cast<T>(
value);
114 template <
typename T>
117 if constexpr (std::is_same_v<T, QVariant>)
121 const QMetaType targetType = QMetaType::fromType<T>();
122 if (sourceType == targetType)
123 return *
reinterpret_cast<const T *
>(
value.constData());
125 if constexpr (std::is_same_v<T,std::remove_const_t<std::remove_pointer_t<T>>
const *>) {
126 using nonConstT = std::remove_const_t<std::remove_pointer_t<T>> *;
127 const QMetaType nonConstTargetType = QMetaType::fromType<nonConstT>();
128 if (
value.metaType() == nonConstTargetType)
129 return *
reinterpret_cast<const nonConstT *
>(
value.constData());
132 if constexpr (std::is_same_v<T, QJSValue>)
133 return toScriptValue(
value);
135 if constexpr (std::is_same_v<T, QJSManagedValue>)
136 return toManagedValue(
value);
138 if constexpr (std::is_same_v<T, QJSPrimitiveValue>)
139 return toPrimitiveValue(
value);
141 if constexpr (std::is_same_v<T, QString>) {
143 return convertQObjectToString(
144 *
reinterpret_cast<QObject *
const *
>(
value.constData()));
148 if constexpr (std::is_same_v<QObject, std::remove_const_t<std::remove_pointer_t<T>>>) {
150 return *
static_cast<QObject *
const *
>(
value.constData());
157 if (sourceType == QMetaType::fromType<QJSValue>())
158 return fromScriptValue<T>(*
reinterpret_cast<const QJSValue *
>(
value.constData()));
160 if (sourceType == QMetaType::fromType<QJSManagedValue>()) {
161 return fromManagedValue<T>(
165 if (sourceType == QMetaType::fromType<QJSPrimitiveValue>()) {
166 return fromPrimitiveValue<T>(
172 if (
value.metaType() == QMetaType::fromType<QString>()) {
173 if (convertString(
value.toString(), targetType, &
t))
175 }
else if (convertVariant(
value, targetType, &
t)) {
184 template<
typename From,
typename To>
187 if constexpr (std::is_base_of_v<To, From>)
190 if constexpr (std::is_same_v<To, QJSValue>)
191 return toScriptValue(from);
193 if constexpr (std::is_same_v<From, QJSValue>)
194 return fromScriptValue<To>(from);
196 if constexpr (std::is_same_v<To, QJSManagedValue>)
197 return toManagedValue(from);
199 if constexpr (std::is_same_v<From, QJSManagedValue>)
200 return fromManagedValue<To>(from);
202 if constexpr (std::is_same_v<To, QJSPrimitiveValue>)
203 return toPrimitiveValue(from);
205 if constexpr (std::is_same_v<From, QJSPrimitiveValue>)
206 return fromPrimitiveValue<To>(from);
208 if constexpr (std::is_same_v<From, QVariant>)
209 return fromVariant<To>(from);
211 if constexpr (std::is_same_v<To, QVariant>)
214 if constexpr (std::is_same_v<To, QString>) {
215 if constexpr (std::is_base_of_v<QObject, std::remove_const_t<std::remove_pointer_t<From>>>)
216 return convertQObjectToString(from);
219 if constexpr (std::is_same_v<From, QDateTime>) {
220 if constexpr (std::is_same_v<To, QDate>)
221 return convertDateTimeToDate(from.toLocalTime());
222 if constexpr (std::is_same_v<To, QTime>)
223 return from.toLocalTime().time();
224 if constexpr (std::is_same_v<To, QString>)
225 return convertDateTimeToString(from.toLocalTime());
228 if constexpr (std::is_same_v<From, QDate>) {
229 if constexpr (std::is_same_v<To, QDateTime>)
231 if constexpr (std::is_same_v<To, QTime>) {
233 return coerceValue<QDateTime, QTime>(coerceValue<QDate, QDateTime>(from));
235 if constexpr (std::is_same_v<To, QString>)
236 return convertDateTimeToString(coerceValue<QDate, QDateTime>(from));
239 if constexpr (std::is_same_v<From, QTime>) {
240 if constexpr (std::is_same_v<To, QDate>) {
242 return from.isValid() ?
QDate(1971, 4, 1) :
QDate();
245 if constexpr (std::is_same_v<To, QDateTime>)
247 if constexpr (std::is_same_v<To, QString>)
248 return convertDateTimeToString(coerceValue<QTime, QDateTime>(from));
251 if constexpr (std::is_same_v<To, std::remove_const_t<std::remove_pointer_t<To>>
const *>) {
252 using nonConstTo = std::remove_const_t<std::remove_pointer_t<To>> *;
253 if constexpr (std::is_same_v<From, nonConstTo>)
258 const QMetaType sourceType = QMetaType::fromType<From>();
259 const QMetaType targetType = QMetaType::fromType<To>();
261 if constexpr (std::is_same_v<From, QString>) {
262 if (convertString(from, targetType, &to))
264 }
else if (convertMetaType(sourceType, &from, targetType, &to)) {
273 void collectGarbage();
276 static void setObjectOwnership(
QObject *, ObjectOwnership);
277 static ObjectOwnership objectOwnership(
QObject *);
280 TranslationExtension = 0x1,
281 ConsoleExtension = 0x2,
282 GarbageCollectionExtension = 0x4,
283 AllExtensions = 0xffffffff
287 void installExtensions(Extensions extensions,
const QJSValue &
object =
QJSValue());
289 void setInterrupted(
bool interrupted);
290 bool isInterrupted()
const;
297 bool hasError()
const;
310#if QT_QML_REMOVED_SINCE(6, 5)
317#if QT_QML_REMOVED_SINCE(6, 5)
324 bool convertMetaType(
QMetaType fromType,
const void *from,
QMetaType toType,
void *to);
353 if (T
t; QJSEngine::convertV2(
value, QMetaType::fromType<T>(), &
t))
355 else if (
value.isVariant())
356 return qvariant_cast<T>(
value.toVariant());
364 if (T
t; QJSEngine::convertManaged(
value, QMetaType::fromType<T>(), &
t))
367 return qvariant_cast<T>(
value.toVariant());
373 if (T
t; QJSEngine::convertPrimitive(
value, QMetaType::fromType<T>(), &
t))
376 return qvariant_cast<T>(
value.toVariant());
382 return value.toVariant();
388 return value.toVariant();
394 return value.toVariant();
\inmodule QtCore\reentrant
\inmodule QtCore \reentrant
The QJSEngine class provides an environment for evaluating JavaScript code.
T fromScriptValue(const QJSValue &value)
Returns the given value converted to the template type {T}.
T fromManagedValue(const QJSManagedValue &value)
Returns the given value converted to the template type {T}.
QV4::ExecutionEngine * handle() const
QJSManagedValue toManagedValue(const T &value)
Creates a QJSManagedValue with the given value.
T fromVariant(const QVariant &value)
Returns the given value converted to the template type {T}.
To coerceValue(const From &from)
Returns the given from converted to the template type {To}.
QJSValue toScriptValue(const T &value)
Creates a QJSValue with the given value.
T fromPrimitiveValue(const QJSPrimitiveValue &value)
Returns the given value converted to the template type {T}.
Extension
This enum is used to specify extensions to be installed via \l installExtensions().
QJSValue newQMetaObject()
ObjectOwnership
ObjectOwnership controls whether or not the JavaScript memory manager automatically destroys the QObj...
QJSPrimitiveValue toPrimitiveValue(const T &value)
Creates a QJSPrimitiveValue with the given value.
The QJSPrimitiveValue class operates on primitive types in JavaScript semantics.
The QJSValue class acts as a container for Qt/JavaScript data types.
\macro QT_RESTRICTED_CAST_FROM_ASCII
static auto fromValue(T &&value) noexcept(std::is_nothrow_copy_constructible_v< T > &&Private::CanUseInternalSpace< T >) -> std::enable_if_t< std::conjunction_v< std::is_copy_constructible< T >, std::is_destructible< T > >, QVariant >
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
#define Q_DECLARE_FLAGS(Flags, Enum)
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
QVariant qjsvalue_cast< QVariant >(const QJSValue &value)
QT_BEGIN_NAMESPACE T qjsvalue_cast(const QJSValue &)
Q_QML_EXPORT QJSEngine * qjsEngine(const QObject *)
static ControlElement< T > * ptr(QWidget *widget)
GLenum GLuint GLenum GLsizei length
GLuint GLsizei const GLchar * message
obj metaObject() -> className()
engine globalObject().setProperty("myObject"
engine evaluate("var myObject = new MyObject()")
[8]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent