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) { 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); }
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(); } }