⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qvariant.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    *ok = true;    switch (uint(d->type)) {    case QVariant::String:        return v_cast<QString>(d)->toLongLong(ok);    case QVariant::Char:        return v_cast<QChar>(d)->unicode();    case QVariant::ByteArray:        return v_cast<QByteArray>(d)->toLongLong(ok);    case QVariant::Bool:        return qlonglong(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 qMetaTypeNumber(d);    case QVariant::ULongLong:    case QVariant::UInt:    case QMetaType::UChar:    case QMetaType::UShort:    case QMetaType::ULong:        return qlonglong(qMetaTypeUNumber(d));    }    *ok = false;    return Q_INT64_C(0);}static qulonglong qConvertToUnsignedNumber(const QVariant::Private *d, bool *ok){    *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);}/*! \internal Converts \a d to type \a t, which is placed in \a result. */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 QMetaType::UChar: {        *static_cast<uchar *>(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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -