?? qvariant.cpp
字號:
{ *ok = true; switch (uint(d->type)) { case QVariant::String: return v_cast<QString>(d)->toULongLong(ok); case QVariant::Char: return v_cast<QChar>(d)->unicode(); case QVariant::ByteArray: return v_cast<QByteArray>(d)->toULongLong(ok); case QVariant::Bool: return qulonglong(d->data.b); case QVariant::Double: case QVariant::Int: case QMetaType::Char: case QMetaType::Short: case QMetaType::Long: case QMetaType::Float: case QMetaType::LongLong: return qulonglong(qMetaTypeNumber(d)); case QVariant::ULongLong: case QVariant::UInt: case QMetaType::UChar: case QMetaType::UShort: case QMetaType::ULong: return qMetaTypeUNumber(d); } *ok = false; return Q_UINT64_C(0);}static bool convert(const QVariant::Private *d, QVariant::Type t, void *result, bool *ok){ Q_ASSERT(d->type != uint(t)); bool dummy; if (!ok) ok = &dummy; switch (uint(t)) { case QVariant::String: { QString *str = static_cast<QString *>(result); switch (d->type) { case QVariant::Char: *str = QString(*v_cast<QChar>(d)); break; case QMetaType::Char: case QMetaType::UChar: *str = QChar::fromAscii(*static_cast<char *>(d->data.shared->ptr)); break; case QMetaType::Short: case QMetaType::Long: case QVariant::Int: case QVariant::LongLong: *str = QString::number(qMetaTypeNumber(d)); break; case QVariant::UInt: case QVariant::ULongLong: case QMetaType::UShort: case QMetaType::ULong: *str = QString::number(qMetaTypeUNumber(d)); break; case QMetaType::Float: *str = QString::number(*static_cast<float *>(d->data.shared->ptr), 'g', FLT_DIG); break; case QVariant::Double: *str = QString::number(d->data.d, 'g', DBL_DIG); break;#if !defined(QT_NO_DATESTRING) case QVariant::Date: *str = v_cast<QDate>(d)->toString(Qt::ISODate); break; case QVariant::Time: *str = v_cast<QTime>(d)->toString(Qt::ISODate); break; case QVariant::DateTime: *str = v_cast<QDateTime>(d)->toString(Qt::ISODate); break;#endif case QVariant::Bool: *str = QLatin1String(d->data.b ? "true" : "false"); break; case QVariant::ByteArray: *str = QString::fromAscii(v_cast<QByteArray>(d)->constData()); break; case QVariant::StringList: if (v_cast<QStringList>(d)->count() == 1) *str = v_cast<QStringList>(d)->at(0); break; default: return false; } break; } case QVariant::Char: { QChar *c = static_cast<QChar *>(result); switch (d->type) { case QVariant::Int: case QVariant::LongLong: case QMetaType::Char: case QMetaType::Short: case QMetaType::Long: case QMetaType::Float: *c = QChar(ushort(qMetaTypeNumber(d))); break; case QVariant::UInt: case QVariant::ULongLong: case QMetaType::UChar: case QMetaType::UShort: case QMetaType::ULong: *c = QChar(ushort(qMetaTypeUNumber(d))); break; default: return false; } break; }#ifndef QT_NO_GEOM_VARIANT case QVariant::Size: { QSize *s = static_cast<QSize *>(result); switch (d->type) { case QVariant::SizeF: *s = v_cast<QSizeF>(d)->toSize(); break; default: return false; } break; } case QVariant::SizeF: { QSizeF *s = static_cast<QSizeF *>(result); switch (d->type) { case QVariant::Size: *s = QSizeF(*(v_cast<QSize>(d))); break; default: return false; } break; } case QVariant::Line: { QLine *s = static_cast<QLine *>(result); switch (d->type) { case QVariant::LineF: *s = v_cast<QLineF>(d)->toLine(); break; default: return false; } break; } case QVariant::LineF: { QLineF *s = static_cast<QLineF *>(result); switch (d->type) { case QVariant::Line: *s = QLineF(*(v_cast<QLine>(d))); break; default: return false; } break; }#endif case QVariant::StringList: if (d->type == QVariant::List) { QStringList *slst = static_cast<QStringList *>(result); const QVariantList *list = v_cast<QVariantList >(d); for (int i = 0; i < list->size(); ++i) slst->append(list->at(i).toString()); } else if (d->type == QVariant::String) { QStringList *slst = static_cast<QStringList *>(result); *slst = QStringList(*v_cast<QString>(d)); } else { return false; } break; case QVariant::Date: { QDate *dt = static_cast<QDate *>(result); if (d->type == QVariant::DateTime) *dt = v_cast<QDateTime>(d)->date();#ifndef QT_NO_DATESTRING else if (d->type == QVariant::String) *dt = QDate::fromString(*v_cast<QString>(d), Qt::ISODate);#endif else return false; break; } case QVariant::Time: { QTime *t = static_cast<QTime *>(result); switch (d->type) { case QVariant::DateTime: *t = v_cast<QDateTime>(d)->time(); break;#ifndef QT_NO_DATESTRING case QVariant::String: *t = QTime::fromString(*v_cast<QString>(d), Qt::ISODate); break;#endif default: return false; } break; } case QVariant::DateTime: { QDateTime *dt = static_cast<QDateTime *>(result); switch (d->type) {#ifndef QT_NO_DATESTRING case QVariant::String: *dt = QDateTime::fromString(*v_cast<QString>(d), Qt::ISODate); break;#endif case QVariant::Date: *dt = QDateTime(*v_cast<QDate>(d)); break; default: return false; } break; } case QVariant::ByteArray: { QByteArray *ba = static_cast<QByteArray *>(result); switch (d->type) { case QVariant::String: *ba = v_cast<QString>(d)->toAscii(); break; case QVariant::Double: *ba = QByteArray::number(d->data.d, 'g', DBL_DIG); break; case QMetaType::Float: *ba = QByteArray::number(*static_cast<float *>(d->data.shared->ptr), 'g', FLT_DIG); break; case QMetaType::Char: case QMetaType::UChar: *ba = QByteArray(1, *static_cast<char *>(d->data.shared->ptr)); break; case QVariant::Int: case QVariant::LongLong: case QMetaType::Short: case QMetaType::Long: *ba = QByteArray::number(qMetaTypeNumber(d)); break; case QVariant::UInt: case QVariant::ULongLong: case QMetaType::UShort: case QMetaType::ULong: *ba = QByteArray::number(qMetaTypeUNumber(d)); break; default: return false; } } break; case QMetaType::Short: *static_cast<short *>(result) = short(qConvertToNumber(d, ok)); return *ok; case QMetaType::Long: *static_cast<long *>(result) = long(qConvertToNumber(d, ok)); return *ok; case QMetaType::UShort: *static_cast<ushort *>(result) = ushort(qConvertToUnsignedNumber(d, ok)); return *ok; case QMetaType::ULong: *static_cast<ulong *>(result) = ulong(qConvertToUnsignedNumber(d, ok)); return *ok; case QVariant::Int: *static_cast<int *>(result) = int(qConvertToNumber(d, ok)); return *ok; case QVariant::UInt: *static_cast<uint *>(result) = uint(qConvertToUnsignedNumber(d, ok)); return *ok; case QVariant::LongLong: *static_cast<qlonglong *>(result) = qConvertToNumber(d, ok); return *ok; case QVariant::ULongLong: { *static_cast<qulonglong *>(result) = qConvertToUnsignedNumber(d, ok); return *ok; } case QVariant::Bool: { bool *b = static_cast<bool *>(result); switch(d->type) { case QVariant::String: { QString str = v_cast<QString>(d)->toLower(); *b = !(str == QLatin1String("0") || str == QLatin1String("false") || str.isEmpty()); break; } case QVariant::Char: *b = !v_cast<QChar>(d)->isNull(); break; case QVariant::Double: case QVariant::Int: case QVariant::LongLong: case QMetaType::Char: case QMetaType::Short: case QMetaType::Long: case QMetaType::Float: *b = qMetaTypeNumber(d) != Q_INT64_C(0); break; case QVariant::UInt: case QVariant::ULongLong: case QMetaType::UChar: case QMetaType::UShort: case QMetaType::ULong: *b = qMetaTypeUNumber(d) != Q_UINT64_C(0); break; default: *b = false; return false; } break; } case QVariant::Double: { double *f = static_cast<double *>(result); switch (d->type) { case QVariant::String: *f = v_cast<QString>(d)->toDouble(ok); break; case QVariant::ByteArray: *f = v_cast<QByteArray>(d)->toDouble(ok); break; case QVariant::Bool: *f = double(d->data.b); break; case QMetaType::Float: *f = *static_cast<float *>(d->data.shared->ptr); break; case QVariant::LongLong: case QVariant::Int: case QMetaType::Char: case QMetaType::Short: case QMetaType::Long: *f = double(qMetaTypeNumber(d)); break; case QVariant::UInt: case QVariant::ULongLong: case QMetaType::UChar: case QMetaType::UShort: case QMetaType::ULong:#if defined(Q_CC_MSVC) && !defined(Q_CC_MSVC_NET) *f = (double)(qlonglong)qMetaTypeUNumber(d);#else *f = double(qMetaTypeUNumber(d));#endif break; default: *f = 0.0; return false; } break; } case QMetaType::Float: { float *f = static_cast<float *>(result); switch (d->type) { case QVariant::String: *f = float(v_cast<QString>(d)->toDouble(ok)); break; case QVariant::ByteArray: *f = float(v_cast<QByteArray>(d)->toDouble(ok)); break; case QVariant::Bool: *f = float(d->data.b); break; case QVariant::Double: *f = float(d->data.d); break; case QVariant::LongLong: case QVariant::Int: case QMetaType::Char: case QMetaType::Short: case QMetaType::Long: *f = float(qMetaTypeNumber(d)); break; case QVariant::UInt: case QVariant::ULongLong: case QMetaType::UChar: case QMetaType::UShort: case QMetaType::ULong:#if defined(Q_CC_MSVC) && !defined(Q_CC_MSVC_NET) *f = (float)(qlonglong)qMetaTypeUNumber(d);#else *f = float(qMetaTypeUNumber(d));#endif break; default: *f = 0.0f; return false; } break; } case QVariant::List: if (d->type == QVariant::StringList) { QVariantList *lst = static_cast<QVariantList *>(result); const QStringList *slist = v_cast<QStringList>(d); for (int i = 0; i < slist->size(); ++i) lst->append(QVariant(slist->at(i))); } else if (qstrcmp(QMetaType::typeName(d->type), "QList<QVariant>") == 0) { *static_cast<QVariantList *>(result) = *static_cast<QList<QVariant> *>(d->data.shared->ptr); } else { return false; } break; case QVariant::Map: if (qstrcmp(QMetaType::typeName(d->type), "QMap<QString, QVariant>") == 0) { *static_cast<QVariantMap *>(result) = *static_cast<QMap<QString, QVariant> *>(d->data.shared->ptr); } else { return false; } break;#ifndef QT_NO_GEOM_VARIANT case QVariant::Rect: if (d->type == QVariant::RectF) *static_cast<QRect *>(result) = (v_cast<QRectF>(d))->toRect(); else return false; break; case QVariant::RectF: if (d->type == QVariant::Rect) *static_cast<QRectF *>(result) = *v_cast<QRect>(d); else return false; break; case QVariant::PointF: if (d->type == QVariant::Point) *static_cast<QPointF *>(result) = *v_cast<QPoint>(d); else return false; break; case QVariant::Point: if (d->type == QVariant::PointF) *static_cast<QPoint *>(result) = (v_cast<QPointF>(d))->toPoint(); else return false; break;#endif default: return false; } return true;}#if !defined(QT_NO_DEBUG_STREAM) && !defined(Q_BROKEN_DEBUG_STREAM)static void streamDebug(QDebug dbg, const QVariant &v){ switch (v.type()) { case QVariant::Int: dbg.nospace() << v.toInt(); break; case QVariant::UInt: dbg.nospace() << v.toUInt(); break; case QVariant::LongLong: dbg.nospace() << v.toLongLong(); break; case QVariant::ULongLong: dbg.nospace() << v.toULongLong(); break; case QVariant::Double: dbg.nospace() << v.toDouble(); break; case QVariant::Bool: dbg.nospace() << v.toBool(); break; case QVariant::String: dbg.nospace() << v.toString(); break; case QVariant::Char: dbg.nospace() << v.toChar();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -