📄 qmetatype.cpp
字号:
#endif QWriteLocker locker(customTypesLock()); static int currentIdx = User; int idx = qMetaTypeType_unlocked(normalizedTypeName); if (!idx) { idx = currentIdx++; ct->resize(ct->count() + 1); QCustomTypeInfo &inf = (*ct)[idx - User]; inf.typeName = normalizedTypeName; inf.constr = constructor; inf.destr = destructor; } return idx;}/*! Returns true if the datatype with ID \a type is registered; otherwise returns false. \sa type(), typeName(), Type*/bool QMetaType::isRegistered(int type){ if (type >= 0 && type < User) { // predefined type return true; } QReadLocker locker(customTypesLock()); const QVector<QCustomTypeInfo> * const ct = customTypes(); return ((type >= User) && (ct && ct->count() > type - User));}/*! Returns a handle to the type called \a typeName, or 0 if there is no such type. \sa isRegistered(), typeName(), Type*/int QMetaType::type(const char *typeName){#ifdef QT_NO_QOBJECT const ::QByteArray normalizedTypeName = typeName;#else const ::QByteArray normalizedTypeName = QMetaObject::normalizedType(typeName);#endif QReadLocker locker(customTypesLock()); return qMetaTypeType_unlocked(normalizedTypeName);}#ifndef QT_NO_DATASTREAM/*! Writes the object pointed to by \a data with the ID \a type to the given \a stream. Returns true if the object is saved successfully; otherwise returns false. The type must have been registered with qRegisterMetaType() and qRegisterMetaTypeStreamOperators() beforehand. Normally, you should not need to call this function directly. Instead, use QVariant's \c operator<<(), which relies on save() to stream custom types. \sa load(), qRegisterMetaTypeStreamOperators()*/bool QMetaType::save(QDataStream &stream, int type, const void *data){ if (!data || !isRegistered(type)) return false; switch(type) { case QMetaType::Void: case QMetaType::VoidStar: case QMetaType::QObjectStar: case QMetaType::QWidgetStar: return false; case QMetaType::Long: stream << qlonglong(*static_cast<const long *>(data)); break; case QMetaType::Int: stream << *static_cast<const int *>(data); break; case QMetaType::Short: stream << *static_cast<const short *>(data); break; case QMetaType::Char: // force a char to be signed stream << *static_cast<const signed char *>(data); break; case QMetaType::ULong: stream << qulonglong(*static_cast<const ulong *>(data)); break; case QMetaType::UInt: stream << *static_cast<const uint *>(data); break; case QMetaType::LongLong: stream << *static_cast<const qlonglong *>(data); break; case QMetaType::ULongLong: stream << *static_cast<const qulonglong *>(data); break; case QMetaType::UShort: stream << *static_cast<const ushort *>(data); break; case QMetaType::UChar: stream << *static_cast<const uchar *>(data); break; case QMetaType::Bool: stream << qint8(*static_cast<const bool *>(data)); break; case QMetaType::Float: stream << *static_cast<const float *>(data); break; case QMetaType::Double: stream << *static_cast<const double *>(data); break; case QMetaType::QChar: stream << *static_cast<const ::QChar *>(data); break;#ifndef QT_BOOTSTRAPPED case QMetaType::QVariantMap: stream << *static_cast<const ::QVariantMap *>(data); break; case QMetaType::QVariantList: stream << *static_cast<const ::QVariantList *>(data); break;#endif case QMetaType::QByteArray: stream << *static_cast<const ::QByteArray *>(data); break; case QMetaType::QString: stream << *static_cast<const ::QString *>(data); break; case QMetaType::QStringList: stream << *static_cast<const ::QStringList *>(data); break;#ifndef QT_BOOTSTRAPPED case QMetaType::QBitArray: stream << *static_cast<const ::QBitArray *>(data); break;#endif case QMetaType::QDate: stream << *static_cast<const ::QDate *>(data); break; case QMetaType::QTime: stream << *static_cast<const ::QTime *>(data); break; case QMetaType::QDateTime: stream << *static_cast<const ::QDateTime *>(data); break;#ifndef QT_BOOTSTRAPPED case QMetaType::QUrl: stream << *static_cast<const ::QUrl *>(data); break;#endif case QMetaType::QLocale: stream << *static_cast<const ::QLocale *>(data); break;#ifndef QT_NO_GEOM_VARIANT case QMetaType::QRect: stream << *static_cast<const ::QRect *>(data); break; case QMetaType::QRectF: stream << *static_cast<const ::QRectF *>(data); break; case QMetaType::QSize: stream << *static_cast<const ::QSize *>(data); break; case QMetaType::QSizeF: stream << *static_cast<const ::QSizeF *>(data); break; case QMetaType::QLine: stream << *static_cast<const ::QLine *>(data); break; case QMetaType::QLineF: stream << *static_cast<const ::QLineF *>(data); break; case QMetaType::QPoint: stream << *static_cast<const ::QPoint *>(data); break; case QMetaType::QPointF: stream << *static_cast<const ::QPointF *>(data); break;#endif#ifndef QT_NO_REGEXP case QMetaType::QRegExp: stream << *static_cast<const ::QRegExp *>(data); break;#endif#ifdef QT3_SUPPORT case QMetaType::QColorGroup:#endif case QMetaType::QFont: case QMetaType::QPixmap: case QMetaType::QBrush: case QMetaType::QColor: case QMetaType::QPalette: case QMetaType::QIcon: case QMetaType::QImage: case QMetaType::QPolygon: case QMetaType::QRegion: case QMetaType::QBitmap: case QMetaType::QCursor: case QMetaType::QSizePolicy: case QMetaType::QKeySequence: case QMetaType::QPen: case QMetaType::QTextLength: case QMetaType::QTextFormat: case QMetaType::QMatrix: case QMetaType::QTransform: if (!qMetaTypeGuiHelper) return false; qMetaTypeGuiHelper[type - FirstGuiType].saveOp(stream, data); break; default: { const QVector<QCustomTypeInfo> * const ct = customTypes(); if (!ct) return false; SaveOperator saveOp = 0; { QReadLocker locker(customTypesLock()); saveOp = ct->at(type - User).saveOp; } if (!saveOp) return false; saveOp(stream, data); break; } } return true;}/*! Reads the object of the specified \a type from the given \a stream into \a data. Returns true if the object is loaded successfully; otherwise returns false. The type must have been registered with qRegisterMetaType() and qRegisterMetaTypeStreamOperators() beforehand. Normally, you should not need to call this function directly. Instead, use QVariant's \c operator>>(), which relies on load() to stream custom types. \sa save(), qRegisterMetaTypeStreamOperators()*/bool QMetaType::load(QDataStream &stream, int type, void *data){ if (!data || !isRegistered(type)) return false; switch(type) { case QMetaType::Void: case QMetaType::VoidStar: case QMetaType::QObjectStar: case QMetaType::QWidgetStar: return false; case QMetaType::Long: { qlonglong l; stream >> l; *static_cast<long *>(data) = long(l); break; } case QMetaType::Int: stream >> *static_cast<int *>(data); break; case QMetaType::Short: stream >> *static_cast<short *>(data); break; case QMetaType::Char: // force a char to be signed stream >> *static_cast<signed char *>(data); break; case QMetaType::ULong: { qulonglong ul; stream >> ul; *static_cast<ulong *>(data) = ulong(ul); break; } case QMetaType::UInt: stream >> *static_cast<uint *>(data); break; case QMetaType::LongLong: stream >> *static_cast<qlonglong *>(data); break; case QMetaType::ULongLong: stream >> *static_cast<qulonglong *>(data); break; case QMetaType::UShort: stream >> *static_cast<ushort *>(data); break; case QMetaType::UChar: stream >> *static_cast<uchar *>(data); break; case QMetaType::Bool: { qint8 b; stream >> b; *static_cast<bool *>(data) = b; break; } case QMetaType::Float: stream >> *static_cast<float *>(data); break; case QMetaType::Double: stream >> *static_cast<double *>(data); break; case QMetaType::QChar: stream >> *static_cast< ::QChar *>(data); break;#ifndef QT_BOOTSTRAPPED case QMetaType::QVariantMap: stream >> *static_cast< ::QVariantMap *>(data); break; case QMetaType::QVariantList: stream >> *static_cast< ::QVariantList *>(data); break;#endif case QMetaType::QByteArray: stream >> *static_cast< ::QByteArray *>(data); break; case QMetaType::QString: stream >> *static_cast< ::QString *>(data); break; case QMetaType::QStringList: stream >> *static_cast< ::QStringList *>(data); break;#ifndef QT_BOOTSTRAPPED case QMetaType::QBitArray: stream >> *static_cast< ::QBitArray *>(data); break;#endif case QMetaType::QDate: stream >> *static_cast< ::QDate *>(data); break; case QMetaType::QTime: stream >> *static_cast< ::QTime *>(data); break; case QMetaType::QDateTime: stream >> *static_cast< ::QDateTime *>(data); break;#ifndef QT_BOOTSTRAPPED case QMetaType::QUrl: stream >> *static_cast< ::QUrl *>(data); break;#endif case QMetaType::QLocale: stream >> *static_cast< ::QLocale *>(data); break;#ifndef QT_NO_GEOM_VARIANT case QMetaType::QRect: stream >> *static_cast< ::QRect *>(data); break; case QMetaType::QRectF: stream >> *static_cast< ::QRectF *>(data); break; case QMetaType::QSize: stream >> *static_cast< ::QSize *>(data); break; case QMetaType::QSizeF: stream >> *static_cast< ::QSizeF *>(data); break; case QMetaType::QLine: stream >> *static_cast< ::QLine *>(data); break; case QMetaType::QLineF: stream >> *static_cast< ::QLineF *>(data); break; case QMetaType::QPoint: stream >> *static_cast< ::QPoint *>(data); break; case QMetaType::QPointF: stream >> *static_cast< ::QPointF *>(data); break;#endif#ifndef QT_NO_REGEXP case QMetaType::QRegExp: stream >> *static_cast< ::QRegExp *>(data); break;#endif#ifdef QT3_SUPPORT case QMetaType::QColorGroup:#endif case QMetaType::QFont: case QMetaType::QPixmap: case QMetaType::QBrush: case QMetaType::QColor: case QMetaType::QPalette: case QMetaType::QIcon: case QMetaType::QImage: case QMetaType::QPolygon: case QMetaType::QRegion: case QMetaType::QBitmap: case QMetaType::QCursor: case QMetaType::QSizePolicy: case QMetaType::QKeySequence: case QMetaType::QPen: case QMetaType::QTextLength: case QMetaType::QTextFormat: case QMetaType::QMatrix: case QMetaType::QTransform: if (!qMetaTypeGuiHelper) return false; qMetaTypeGuiHelper[type - FirstGuiType].loadOp(stream, data); break; default: { const QVector<QCustomTypeInfo> * const ct = customTypes(); if (!ct) return false; LoadOperator loadOp = 0; { QReadLocker locker(customTypesLock()); loadOp = ct->at(type - User).loadOp; } if (!loadOp) return false; loadOp(stream, data); break; } } return true;}#endif/*! Returns a copy of \a copy, assuming it is of type \a type. If \a copy is zero, creates a default type. \sa destroy(), isRegistered(), Type*/void *QMetaType::construct(int type, const void *copy){ if (copy) { switch(type) { case QMetaType::VoidStar: case QMetaType::QObjectStar: case QMetaType::QWidgetStar: return new void *(*static_cast<void* const *>(copy)); case QMetaType::Long: return new long(*static_cast<const long*>(copy)); case QMetaType::Int: return new int(*static_cast<const int*>(copy)); case QMetaType::Short:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -