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)) {
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());
226 if constexpr (std::is_same_v<To, double>)
227 return convertDateTimeToNumber(from.toLocalTime());
230 if constexpr (std::is_same_v<From, QDate>) {
231 if constexpr (std::is_same_v<To, QDateTime>)
233 if constexpr (std::is_same_v<To, QTime>) {
235 return coerceValue<QDateTime, QTime>(coerceValue<QDate, QDateTime>(from));
237 if constexpr (std::is_same_v<To, QString>)
238 return convertDateTimeToString(coerceValue<QDate, QDateTime>(from));
239 if constexpr (std::is_same_v<To, double>)
240 return convertDateTimeToNumber(coerceValue<QDate, QDateTime>(from));
243 if constexpr (std::is_same_v<From, QTime>) {
244 if constexpr (std::is_same_v<To, QDate>) {
246 return from.isValid() ?
QDate(1971, 4, 1) :
QDate();
249 if constexpr (std::is_same_v<To, QDateTime>)
251 if constexpr (std::is_same_v<To, QString>)
252 return convertDateTimeToString(coerceValue<QTime, QDateTime>(from));
253 if constexpr (std::is_same_v<To, double>)
254 return convertDateTimeToNumber(coerceValue<QTime, QDateTime>(from));
257 if constexpr (std::is_same_v<To, std::remove_const_t<std::remove_pointer_t<To>>
const *>) {
258 using nonConstTo = std::remove_const_t<std::remove_pointer_t<To>> *;
259 if constexpr (std::is_same_v<From, nonConstTo>)
264 const QMetaType sourceType = QMetaType::fromType<From>();
265 const QMetaType targetType = QMetaType::fromType<To>();
267 if constexpr (std::is_same_v<From, QString>) {
268 if (convertString(from, targetType, &to))
270 }
else if (convertMetaType(sourceType, &from, targetType, &to)) {