QVariant QQmlStringConverters::variantFromString(const QString &s, int preferredType, bool *ok) { switch (preferredType) { case QMetaType::Int: return QVariant(int(qRound(s.toDouble(ok)))); case QMetaType::UInt: return QVariant(uint(qRound(s.toDouble(ok)))); #ifndef QT_NO_DATESTRING case QMetaType::QDate: return QVariant::fromValue(dateFromString(s, ok)); case QMetaType::QTime: return QVariant::fromValue(timeFromString(s, ok)); case QMetaType::QDateTime: return QVariant::fromValue(dateTimeFromString(s, ok)); #endif // QT_NO_DATESTRING case QMetaType::QPointF: return QVariant::fromValue(pointFFromString(s, ok)); case QMetaType::QPoint: return QVariant::fromValue(pointFFromString(s, ok).toPoint()); case QMetaType::QSizeF: return QVariant::fromValue(sizeFFromString(s, ok)); case QMetaType::QSize: return QVariant::fromValue(sizeFFromString(s, ok).toSize()); case QMetaType::QRectF: return QVariant::fromValue(rectFFromString(s, ok)); case QMetaType::QRect: return QVariant::fromValue(rectFFromString(s, ok).toRect()); default: return QQml_valueTypeProvider()->createVariantFromString(preferredType, s, ok); } }
QVariant read(int variantType, const QString &str) { QVariant value; bool conversionOk = true; switch (variantType) { case QMetaType::QPoint: value = pointFFromString(str, &conversionOk).toPoint(); break; case QMetaType::QPointF: value = pointFFromString(str, &conversionOk); break; case QMetaType::QSize: value = sizeFFromString(str, &conversionOk).toSize(); break; case QMetaType::QSizeF: value = sizeFFromString(str, &conversionOk); break; case QMetaType::QRect: value = rectFFromString(str, &conversionOk).toRect(); break; case QMetaType::QRectF: value = rectFFromString(str, &conversionOk); break; case QMetaType::QUrl: value = QVariant(QUrl(str)); break; case QMetaType::QColor: value = colorFromString(str, &conversionOk); break; case QMetaType::QVector3D: value = vector3DFromString(str, &conversionOk); break; default: { if (variantType == QMetaType::type("Enumeration")) { value = QVariant::fromValue<Enumeration>(enumerationFromString(str, &conversionOk)); } else { value = QVariant(str); value.convert(static_cast<QVariant::Type>(variantType)); } break; } } if (!conversionOk) { qWarning() << "Could not convert" << str << "to" << QMetaType::typeName(variantType); value = QVariant(str); } return value; }
QVariant QDeclarativeStringConverters::variantFromString(const QString &s, int preferredType, bool *ok) { switch (preferredType) { case QMetaType::Int: return QVariant(int(qRound(s.toDouble(ok)))); case QMetaType::UInt: return QVariant(uint(qRound(s.toDouble(ok)))); case QMetaType::QColor: return QVariant::fromValue(colorFromString(s, ok)); #ifndef QT_NO_DATESTRING case QMetaType::QDate: return QVariant::fromValue(dateFromString(s, ok)); case QMetaType::QTime: return QVariant::fromValue(timeFromString(s, ok)); case QMetaType::QDateTime: return QVariant::fromValue(dateTimeFromString(s, ok)); #endif // QT_NO_DATESTRING case QMetaType::QPointF: return QVariant::fromValue(pointFFromString(s, ok)); case QMetaType::QPoint: return QVariant::fromValue(pointFFromString(s, ok).toPoint()); case QMetaType::QSizeF: return QVariant::fromValue(sizeFFromString(s, ok)); case QMetaType::QSize: return QVariant::fromValue(sizeFFromString(s, ok).toSize()); case QMetaType::QRectF: return QVariant::fromValue(rectFFromString(s, ok)); case QMetaType::QRect: return QVariant::fromValue(rectFFromString(s, ok).toRect()); case QMetaType::QVector3D: return QVariant::fromValue(vector3DFromString(s, ok)); default: if (ok) *ok = false; return QVariant(); } }
QT_BEGIN_NAMESPACE QVariant QQmlStringConverters::variantFromString(const QString &s) { if (s.isEmpty()) return QVariant(s); bool ok = false; QRectF r = rectFFromString(s, &ok); if (ok) return QVariant(r); QPointF p = pointFFromString(s, &ok); if (ok) return QVariant(p); QSizeF sz = sizeFFromString(s, &ok); if (ok) return QVariant(sz); return QQml_valueTypeProvider()->createVariantFromString(s); }
QVariant QDeclarativeStringConverters::variantFromString(const QString &s) { if (s.isEmpty()) return QVariant(s); bool ok = false; QRectF r = rectFFromString(s, &ok); if (ok) return QVariant(r); QColor c = colorFromString(s, &ok); if (ok) return QVariant(c); QPointF p = pointFFromString(s, &ok); if (ok) return QVariant(p); QSizeF sz = sizeFFromString(s, &ok); if (ok) return QVariant(sz); QVector3D v = vector3DFromString(s, &ok); if (ok) return QVariant::fromValue(v); return QVariant(s); }
bool QQmlStringConverters::createFromString(int type, const QString &s, void *data, size_t n) { Q_ASSERT(data); bool ok = false; switch (type) { case QMetaType::Int: { Q_ASSERT(n >= sizeof(int)); int *p = reinterpret_cast<int *>(data); *p = int(qRound(s.toDouble(&ok))); return ok; } case QMetaType::UInt: { Q_ASSERT(n >= sizeof(uint)); uint *p = reinterpret_cast<uint *>(data); *p = uint(qRound(s.toDouble(&ok))); return ok; } #ifndef QT_NO_DATESTRING case QMetaType::QDate: { Q_ASSERT(n >= sizeof(QDate)); QDate *p = reinterpret_cast<QDate *>(data); *p = dateFromString(s, &ok); return ok; } case QMetaType::QTime: { Q_ASSERT(n >= sizeof(QTime)); QTime *p = reinterpret_cast<QTime *>(data); *p = timeFromString(s, &ok); return ok; } case QMetaType::QDateTime: { Q_ASSERT(n >= sizeof(QDateTime)); QDateTime *p = reinterpret_cast<QDateTime *>(data); *p = dateTimeFromString(s, &ok); return ok; } #endif // QT_NO_DATESTRING case QMetaType::QPointF: { Q_ASSERT(n >= sizeof(QPointF)); QPointF *p = reinterpret_cast<QPointF *>(data); *p = pointFFromString(s, &ok); return ok; } case QMetaType::QPoint: { Q_ASSERT(n >= sizeof(QPoint)); QPoint *p = reinterpret_cast<QPoint *>(data); *p = pointFFromString(s, &ok).toPoint(); return ok; } case QMetaType::QSizeF: { Q_ASSERT(n >= sizeof(QSizeF)); QSizeF *p = reinterpret_cast<QSizeF *>(data); *p = sizeFFromString(s, &ok); return ok; } case QMetaType::QSize: { Q_ASSERT(n >= sizeof(QSize)); QSize *p = reinterpret_cast<QSize *>(data); *p = sizeFFromString(s, &ok).toSize(); return ok; } case QMetaType::QRectF: { Q_ASSERT(n >= sizeof(QRectF)); QRectF *p = reinterpret_cast<QRectF *>(data); *p = rectFFromString(s, &ok); return ok; } case QMetaType::QRect: { Q_ASSERT(n >= sizeof(QRect)); QRect *p = reinterpret_cast<QRect *>(data); *p = rectFFromString(s, &ok).toRect(); return ok; } default: return QQml_valueTypeProvider()->createValueFromString(type, s, data, n); } }