QMetaType Class
La clase QMetaType gestiona los tipos con nombre en el sistema de meta-objetos. Más...
| Cabecera: | #include <QMetaType> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Esta clase es igual-comparable.
Nota: Todas las funciones de esta clase son thread-safe.
Tipos Públicos
| enum | Type { Void, Bool, Int, UInt, Double, …, UnknownType } |
| enum | TypeFlag { NeedsConstruction, NeedsCopyConstruction, NeedsMoveConstruction, NeedsDestruction, RelocatableType, …, IsConst } |
| flags | TypeFlags |
Funciones Públicas
(since 6.0) | QMetaType() |
| QMetaType(int typeId) | |
(since 6.0) qsizetype | alignOf() const |
(since 6.0) QPartialOrdering | compare(const void *lhs, const void *rhs) const |
| void * | construct(void *where, const void *copy = nullptr) const |
| void * | create(const void *copy = nullptr) const |
| bool | debugStream(QDebug &dbg, const void *rhs) |
| void | destroy(void *data) const |
| void | destruct(void *data) const |
(since 6.0) bool | equals(const void *lhs, const void *rhs) const |
| QMetaType::TypeFlags | flags() const |
(since 6.1) bool | hasRegisteredDataStreamOperators() const |
(since 6.0) bool | hasRegisteredDebugStreamOperator() const |
| int | id() const |
(since 6.5) bool | isCopyConstructible() const |
(since 6.5) bool | isDefaultConstructible() const |
(since 6.5) bool | isDestructible() const |
| bool | isEqualityComparable() const |
(since 6.5) bool | isMoveConstructible() const |
| bool | isOrdered() const |
| bool | isRegistered() const |
| bool | isValid() const |
| bool | load(QDataStream &stream, void *data) const |
| const QMetaObject * | metaObject() const |
| const char * | name() const |
(since 6.5) void | registerType() const |
| bool | save(QDataStream &stream, const void *data) const |
| qsizetype | sizeOf() const |
(since 6.6) QMetaType | underlyingType() const |
Miembros públicos estáticos
| bool | canConvert(QMetaType fromType, QMetaType toType) |
| bool | canView(QMetaType fromType, QMetaType toType) |
| bool | convert(QMetaType fromType, const void *from, QMetaType toType, void *to) |
| QMetaType | fromName(QByteArrayView typeName) |
| QMetaType | fromType() |
| bool | hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType) |
| bool | hasRegisteredConverterFunction() |
| bool | hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType) |
(since 6.0) bool | hasRegisteredMutableViewFunction() |
| bool | isRegistered(int type) |
| bool | registerConverter() |
| bool | registerConverter(To (From::*)() const function) |
| bool | registerConverter(To (From::*)(bool *) const function) |
| bool | registerConverter(UnaryFunction function) |
(since 6.0) bool | registerMutableView(To (From::*)() function) |
(since 6.0) bool | registerMutableView(UnaryFunction function) |
(since 6.0) bool | view(QMetaType fromType, void *from, QMetaType toType, void *to) |
No miembros relacionados
(since 6.4) size_t | qHash(QMetaType key, size_t seed = 0) |
| int | qMetaTypeId() |
| int | qRegisterMetaType() |
(since 6.5) int | qRegisterMetaType(QMetaType meta) |
| bool | operator!=(const QMetaType &lhs, const QMetaType &rhs) |
(since 6.5) QDebug | operator<<(QDebug d, QMetaType m) |
| bool | operator==(const QMetaType &lhs, const QMetaType &rhs) |
Macros
| Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container) | |
| Q_DECLARE_METATYPE(Type) | |
| Q_DECLARE_OPAQUE_POINTER(PointerType) | |
| Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container) | |
| Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer) |
Descripción detallada
Esta clase se utiliza como ayudante para marshall tipos en QVariant y en las conexiones de señales y ranuras en cola. Asocia un nombre de tipo a un tipo para que pueda ser creado y destruido dinámicamente en tiempo de ejecución.
Los nombres de tipo pueden registrarse con QMetaType utilizando qRegisterMetaType() o registerType(). El registro no es necesario para la mayoría de las operaciones; sólo es necesario para las operaciones que intentan resolver un nombre de tipo en forma de cadena a un objeto QMetaType o al ID del tipo. Entre ellas se incluyen algunas conexiones de ranura de señal de estilo antiguo que utilizan QObject::connect(), la lectura de tipos de usuario de QDataStream a QVariant, o la vinculación a otros lenguajes y mecanismos IPC, como QML, D-Bus, JavaScript, etc.
El siguiente código asigna y destruye una instancia de MyClass por su nombre, lo que requiere que MyClass haya sido registrado previamente:
QMetaType type = QMetaType::fromName("MyClass"); if (type.isValid()) { void *myClassPtr = type.create(); //... type.destroy(myClassPtr); myClassPtr = nullptr; }
Si queremos que los operadores de flujo operator<<() y operator>>() funcionen en objetos QVariant que almacenan tipos personalizados, el tipo personalizado debe proporcionar los operadores operator<<() y operator>>().
Véase también Q_DECLARE_METATYPE(), QVariant::setValue(), QVariant::value(), y QVariant::fromValue().
Documentación de tipos miembros
enum QMetaType::Type
Estos son los tipos incorporados que admite QMetaType:
| Constante | Valor | Descripción |
|---|---|---|
QMetaType::Void | 43 | void |
QMetaType::Bool | 1 | bool |
QMetaType::Int | 2 | int |
QMetaType::UInt | 3 | unsigned int |
QMetaType::Double | 6 | double |
QMetaType::QChar | 7 | QChar |
QMetaType::QString | 10 | QString |
QMetaType::QByteArray | 12 | QByteArray |
QMetaType::Nullptr | 51 | std::nullptr_t |
QMetaType::VoidStar | 31 | void * |
QMetaType::Long | 32 | long |
QMetaType::LongLong | 4 | LongLong |
QMetaType::Short | 33 | short |
QMetaType::Char | 34 | char |
QMetaType::Char16 | 56 | char16_t |
QMetaType::Char32 | 57 | char32_t |
QMetaType::ULong | 35 | unsigned long |
QMetaType::ULongLong | 5 | ULongLong |
QMetaType::UShort | 36 | unsigned short |
QMetaType::SChar | 40 | signed char |
QMetaType::UChar | 37 | unsigned char |
QMetaType::Float | 38 | float |
QMetaType::Float16 | 63 | qfloat16 |
QMetaType::QObjectStar | 39 | QObject * |
QMetaType::QBitArray | 13 | QBitArray |
QMetaType::QBitmap | 0x1009 | QBitmap |
QMetaType::QBrush | 0x1002 | QBrush |
QMetaType::QByteArrayList | 49 | QByteArrayList |
QMetaType::QCborArray | 54 | QCborArray |
QMetaType::QCborMap | 55 | QCborMap |
QMetaType::QCborSimpleType | 52 | QCborSimpleType |
QMetaType::QCborValue | 53 | QCborValue |
QMetaType::QColor | 0x1003 | QColor |
QMetaType::QColorSpace | 0x1017 | QColorSpace (introducido en Qt 5.15) |
QMetaType::QCursor | 0x100a | QCursor |
QMetaType::QDate | 14 | QDate |
QMetaType::QDateTime | 16 | QDateTime |
QMetaType::QEasingCurve | 29 | QEasingCurve |
QMetaType::QFont | 0x1000 | QFont |
QMetaType::QIcon | 0x1005 | QIcon |
QMetaType::QImage | 0x1006 | QImage |
QMetaType::QJsonArray | 47 | QJsonArray |
QMetaType::QJsonDocument | 48 | QJsonDocument |
QMetaType::QJsonObject | 46 | QJsonObject |
QMetaType::QJsonValue | 45 | QJsonValue |
QMetaType::QKeySequence | 0x100b | QKeySequence |
QMetaType::QLine | 23 | QLine |
QMetaType::QLineF | 24 | QLineF |
QMetaType::QLocale | 18 | QLocale |
QMetaType::QMatrix4x4 | 0x1011 | QMatrix4x4 |
QMetaType::QModelIndex | 42 | QModelIndex |
QMetaType::QPalette | 0x1004 | QPalette |
QMetaType::QPen | 0x100c | QPen |
QMetaType::QPersistentModelIndex | 50 | QPersistentModelIndex (introducido en Qt 5.5) |
QMetaType::QPixmap | 0x1001 | QPixmap |
QMetaType::QPoint | 25 | QPoint |
QMetaType::QPointF | 26 | QPointF |
QMetaType::QPolygon | 0x1007 | QPolygon |
QMetaType::QPolygonF | 0x1016 | QPolygonF |
QMetaType::QQuaternion | 0x1015 | QQuaternion |
QMetaType::QRect | 19 | QRect |
QMetaType::QRectF | 20 | QRectF |
QMetaType::QRegion | 0x1008 | QRegion |
QMetaType::QRegularExpression | 44 | QRegularExpression |
QMetaType::QSize | 21 | QSize |
QMetaType::QSizeF | 22 | QSizeF |
QMetaType::QSizePolicy | 0x2000 | QSizePolicy |
QMetaType::QStringList | 11 | QStringList |
QMetaType::QTextFormat | 0x100e | QTextFormat |
QMetaType::QTextLength | 0x100d | QTextLength |
QMetaType::QTime | 15 | QTime |
QMetaType::QTransform | 0x1010 | QTransform |
QMetaType::QUrl | 17 | QUrl |
QMetaType::QUuid | 30 | QUuid |
QMetaType::QVariant | 41 | QVariant |
QMetaType::QVariantHash | 28 | QVariantHash |
QMetaType::QVariantList | 9 | QVariantList |
QMetaType::QVariantMap | 8 | QVariantMap |
QMetaType::QVariantPair | 58 | QVariantPair |
QMetaType::QVector2D | 0x1012 | QVector2D |
QMetaType::QVector3D | 0x1013 | QVector3D |
QMetaType::QVector4D | 0x1014 | QVector4D |
QMetaType::User | 65536 | Valor base para tipos de usuario |
QMetaType::UnknownType | 0 | Se trata de un identificador de tipo no válido. Se devuelve desde QMetaType para tipos que no están registrados |
Se pueden registrar tipos adicionales utilizando qRegisterMetaType() o llamando a registerType().
Véase también type().
enum QMetaType::TypeFlag
flags QMetaType::TypeFlags
El enum describe atributos de un tipo soportado por QMetaType.
| Constante | Valor | Descripción |
|---|---|---|
QMetaType::NeedsConstruction | 0x1 | Este tipo tiene un constructor por defecto. Si la bandera no está activada, las instancias pueden inicializarse de forma segura con memset a 0. |
QMetaType::NeedsCopyConstruction (since Qt 6.5) | 0x4000 | Este tipo tiene un constructor de copia no trivial. Si la bandera no está establecida, las instancias pueden ser copiadas con memcpy. |
QMetaType::NeedsMoveConstruction (since Qt 6.5) | 0x8000 | Este tipo tiene un constructor move no trivial. Si la bandera no está activada, las instancias se pueden mover con memcpy. |
QMetaType::NeedsDestruction | 0x2 | Este tipo tiene un destructor no trivial. Si el indicador no está activado, no es necesario llamar al destructor antes de desechar los objetos. |
QMetaType::RelocatableType | 0x4 | Una instancia de un tipo que tenga este atributo puede moverse con seguridad a una ubicación de memoria diferente utilizando memcpy. |
QMetaType::IsEnumeration | 0x10 | Este tipo es una enumeración. |
QMetaType::IsUnsignedEnumeration | 0x100 | Si el tipo es una enumeración, su tipo subyacente es unsigned. |
QMetaType::PointerToQObject | 0x8 | Este tipo es un puntero a una clase derivada de QObject. |
QMetaType::IsPointer | 0x800 | Este tipo es un puntero a otro tipo. |
QMetaType::IsConst | 0x2000 | Indica que los valores de este tipo son inmutables; por ejemplo, porque son punteros a objetos const. |
Nota: Antes de Qt 6.5, los indicadores NeedsConstruction y NeedsDestruction se activaban incorrectamente si el constructor o el destructor de la copia no eran triviales (es decir, si el tipo no era trivial).
Tenga en cuenta que los indicadores Needs pueden estar activados pero el metatipo puede no tener un constructor de acceso público del tipo correspondiente o un destructor de acceso público.
El tipo TypeFlags es un typedef para QFlags<TypeFlag>. Almacena una combinación OR de valores TypeFlag.
Documentación de las funciones miembro
[constexpr noexcept, since 6.0] QMetaType::QMetaType()
Construye un objeto QMetaType inválido por defecto.
Esta función se introdujo en Qt 6.0.
[explicit] QMetaType::QMetaType(int typeId)
Construye un objeto QMetaType que contiene toda la información sobre el tipo typeId.
[constexpr, since 6.0] qsizetype QMetaType::alignOf() const
Devuelve la alineación del tipo en bytes (es decir, alignof(T), donde T es el tipo real para el que se construyó esta instancia de QMetaType ).
Esta función se utiliza normalmente junto con construct() para realizar una gestión de bajo nivel de la memoria utilizada por un tipo.
Esta función se introdujo en Qt 6.0.
Véase también QMetaType::construct() y QMetaType::sizeOf().
[static] bool QMetaType::canConvert(QMetaType fromType, QMetaType toType)
Devuelve true si QMetaType::convert puede convertir de fromType a toType. Tenga en cuenta que se trata principalmente de la capacidad de ejecutar la conversión, mientras que la conversión real puede fallar cuando se intenta (por ejemplo, convertir un valor de coma flotante a un entero fuera de su rango).
La función registerConverter() puede utilizarse para registrar conversiones adicionales, ya sea entre un tipo incorporado y uno no incorporado, o entre dos tipos no incorporados. Esta función devolverá true si la ruta de conversión está registrada.
Qt soporta las siguientes conversiones:
Otras conversiones admitidas son entre todos los tipos primitivos (int, float, bool, etc., incluidos todos los enums) y entre cualquier tipo de puntero y std::nullptr_t. Las enumeraciones también pueden convertirse a QString y QByteArray.
Si tanto fromType como toType son tipos derivados de QObject (o punteros a ellos), esta función también devolverá true si uno de los tipos deriva del otro. Es decir, devuelve true si static_cast<> del tipo descrito por fromType al tipo descrito por toType compilaría. La función convert() opera como qobject_cast() y verifica el tipo dinámico del objeto apuntado por QVariant.
Una conversión desde un contenedor secuencial también devolverá true para esta función si el toType es QVariantList.
De forma similar, una conversión desde un contenedor asociativo también devolverá verdadero para esta función si toType es QVariantHash o QVariantMap.
Véase también convert(), QMetaSequence::Iterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QMetaAssociation::Iterable, y Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().
[static] bool QMetaType::canView(QMetaType fromType, QMetaType toType)
Devuelve true si QMetaType::view puede crear una vista mutable del tipo toType sobre el tipo fromType.
La conversión entre punteros de tipos derivados de QObject devolverá true para esta función si una qobject_cast del tipo descrito por fromType al tipo descrito por toType tendría éxito.
Puede crear una vista mutable de tipo QMetaSequence::Iterable en cualquier contenedor registrado con Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().
Del mismo modo, puede crear una vista mutable del tipo QMetaAssociation::Iterable en cualquier contenedor registrado con Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().
Véase también convert(), QMetaSequence::Iterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QMetaAssociation::Iterable, y Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().
[since 6.0] QPartialOrdering QMetaType::compare(const void *lhs, const void *rhs) const
Compara los objetos en lhs y rhs para ordenarlos.
Devuelve QPartialOrdering::Unordered si no se admite la comparación o los valores no están ordenados. En caso contrario, devuelve QPartialOrdering::Less, QPartialOrdering::Equivalent o QPartialOrdering::Greater si lhs es menor, equivalente o mayor que rhs, respectivamente.
Ambos objetos deben ser del tipo descrito por este metateipo. Si lhs o rhs son nullptr, los valores no están ordenados. La comparación sólo se admite si el operador menos que del tipo era visible en la declaración del metateipo.
Si el operador de igualdad del tipo también era visible, los valores sólo se compararán iguales si el operador de igualdad dice que lo son. En ausencia de un operador de igualdad, cuando ninguno de los valores es menor que el otro, los valores se consideran iguales; si la igualdad también está disponible y dos valores de este tipo no son iguales, se consideran desordenados, al igual que los valores NaN (not a number) de un tipo de coma flotante quedan fuera de su ordenación.
Nota: Si no había un operador menos que visible para la declaración del metateipo, los valores están desordenados incluso si un operador de igualdad visible para la declaración los considera iguales: compare() == 0 sólo concuerda con equals() si el operador menos que era visible.
Esta función se introdujo en Qt 6.0.
Véase también equals() y isOrdered().
void *QMetaType::construct(void *where, const void *copy = nullptr) const
Construye un valor del tipo para el que se construyó esta instancia QMetaType en la memoria existente direccionada por where, que es una copia de copy, y devuelve where. Si copy es cero, el valor se construye por defecto.
Esta es una función de bajo nivel para gestionar explícitamente la memoria utilizada para almacenar el tipo. Considere llamar a create() si no necesita este nivel de control (es decir, utilice "new" en lugar de "placement new").
Debe asegurarse de que where apunte a una ubicación en la que se pueda almacenar el nuevo valor y que where esté adecuadamente alineado. El tamaño del tipo puede consultarse llamando a sizeOf().
La regla general para la alineación es que un tipo se alinea a su límite natural, que es la menor potencia de 2 que es mayor que el tipo, a menos que esa alineación sea mayor que la alineación máxima útil para la plataforma. A efectos prácticos, una alineación mayor que 2 * sizeof(void*) sólo es necesaria para instrucciones de hardware especiales (por ejemplo, cargas y almacenamientos SSE alineados en x86).
[static] bool QMetaType::convert(QMetaType fromType, const void *from, QMetaType toType, void *to)
Convierte el objeto en from de fromType al espacio preasignado en to tecleado toType. Devuelve true, si la conversión tuvo éxito, en caso contrario false.
Tanto from como to tienen que ser punteros válidos.
void *QMetaType::create(const void *copy = nullptr) const
Devuelve una copia de copy, asumiendo que es del tipo para el que se creó esta instancia QMetaType. Si copy es nullptr, crea una instancia construida por defecto.
Véase también QMetaType::destroy().
bool QMetaType::debugStream(QDebug &dbg, const void *rhs)
Envía el objeto rhs al flujo de depuración dbg. Devuelve true en caso de éxito, en caso contrario false.
void QMetaType::destroy(void *data) const
Destruye el data, suponiendo que sea del tipo para el que se creó esta instancia QMetaType.
Véase también QMetaType::create().
void QMetaType::destruct(void *data) const
Destruye el valor, localizado en data, asumiendo que es del tipo para el que se construyó esta instancia QMetaType.
A diferencia de destroy(), esta función sólo invoca al destructor del tipo, no invoca al operador delete.
Véase también QMetaType::construct().
[since 6.0] bool QMetaType::equals(const void *lhs, const void *rhs) const
Compara los objetos en lhs y rhs para la igualdad.
Ambos objetos deben ser del tipo descrito por este metateipo. Sólo puede comparar los dos objetos si un operador menor que o de igualdad para el tipo era visible para la declaración del metateipo. En caso contrario, el metateipo nunca considera iguales los valores. Cuando un operador de igualdad era visible para la declaración del metateipo, es autoritativo; de lo contrario, si menos que es visible, cuando ninguno de los valores es menor que el otro, los dos se consideran iguales. Si los valores no están ordenados (véase compare() para más detalles) no son iguales.
Devuelve true si los dos objetos se comparan igual, en caso contrario false.
Esta función se introdujo en Qt 6.0.
Véase también isEqualityComparable() y compare().
[constexpr] QMetaType::TypeFlags QMetaType::flags() const
Devuelve las banderas del tipo para el que se construyó esta instancia de QMetaType. Para inspeccionar rasgos de tipo específicos, prefiera utilizar una de las funciones "is-" en lugar de las banderas directamente.
Véase también QMetaType::TypeFlags, isDefaultConstructible(), isCopyConstructible(), isMoveConstructible(), isDestructible(), isEqualityComparable(), y isOrdered().
[static] QMetaType QMetaType::fromName(QByteArrayView typeName)
Devuelve un QMetaType que coincide con typeName. El objeto devuelto no es válido si el typeName no es conocido por QMetaType
[static constexpr] template <typename T> QMetaType QMetaType::fromType()
Devuelve el QMetaType correspondiente al tipo en el parámetro de plantilla.
[static] bool QMetaType::hasRegisteredConverterFunction(QMetaType fromType, QMetaType toType)
Devuelve true, si el sistema de metatipos tiene una conversión registrada del id de metatipo fromType a toType
[static] template <typename From, typename To> bool QMetaType::hasRegisteredConverterFunction()
Devuelve true, si el metatipo del sistema tiene una conversión registrada del tipo From al tipo To.
Esta es una función sobrecargada.
[since 6.1] bool QMetaType::hasRegisteredDataStreamOperators() const
Devuelve true, si el sistema de metatipos ha registrado operadores de flujo de datos para este metatipo.
Esta función se introdujo en Qt 6.1.
[since 6.0] bool QMetaType::hasRegisteredDebugStreamOperator() const
Devuelve true, si el sistema de metatipos tiene un operador de flujo de depuración registrado para este metatipo.
Esta función se introdujo en Qt 6.0.
[static] bool QMetaType::hasRegisteredMutableViewFunction(QMetaType fromType, QMetaType toType)
Devuelve true, si el sistema de metatipos tiene una vista mutable registrada en el id de metatipo fromType del id de metatipo toType.
[static, since 6.0] template <typename From, typename To> bool QMetaType::hasRegisteredMutableViewFunction()
Devuelve true, si el meta sistema de tipos tiene una vista mutable registrada en el tipo From del tipo To.
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.0.
int QMetaType::id() const
Devuelve el tipo de identificación de esta instancia de QMetaType.
[noexcept, since 6.5] bool QMetaType::isCopyConstructible() const
Devuelve true si este tipo se puede construir con copia. Si se puede, entonces construct() y create() se pueden utilizar con un parámetro copy que no sea nulo.
Esta función se introdujo en Qt 6.5.
Véase también flags(), isDefaultConstructible(), isMoveConstructible() y isDestructible().
[noexcept, since 6.5] bool QMetaType::isDefaultConstructible() const
Devuelve true si este tipo puede construirse por defecto. Si se puede, entonces construct() y create() se pueden utilizar con un parámetro copy que sea null.
Esta función se introdujo en Qt 6.5.
Véase también flags(), isCopyConstructible(), isMoveConstructible(), y isDestructible().
[noexcept, since 6.5] bool QMetaType::isDestructible() const
Devuelve true si este tipo puede ser destruido. Si se puede, entonces se puede llamar a destroy() y destruct().
Esta función se introdujo en Qt 6.5.
Véase también flags(), isDefaultConstructible(), isCopyConstructible(), y isMoveConstructible().
bool QMetaType::isEqualityComparable() const
Devuelve true si un operador menor que o de igualdad para el tipo descrito por este metatipo era visible para la declaración del metatipo, en caso contrario false.
Véase también equals() y isOrdered().
[noexcept, since 6.5] bool QMetaType::isMoveConstructible() const
Devuelve true si este tipo puede ser construido con move. QMetaType actualmente no tiene una API para hacer uso de este rasgo.
Esta función se introdujo en Qt 6.5.
Véase también flags(), isDefaultConstructible(), isCopyConstructible(), y isDestructible().
bool QMetaType::isOrdered() const
Devuelve true si un operador less than para el tipo descrito por este metateipo era visible para la declaración del metateipo, en caso contrario false.
Véase también compare() y isEqualityComparable().
[noexcept] bool QMetaType::isRegistered() const
Devuelve true si este objeto QMetaType ha sido registrado en el registro global de metatodos de Qt. El registro permite encontrar el tipo por su nombre (usando QMetaType::fromName()) o por su ID (usando el constructor).
Véase también qRegisterMetaType() y isValid().
[static] bool QMetaType::isRegistered(int type)
Devuelve true si el tipo de dato con ID type está registrado; en caso contrario devuelve false.
[constexpr noexcept] bool QMetaType::isValid() const
Devuelve true si este objeto QMetaType contiene información válida sobre un tipo, false en caso contrario.
Véase también isRegistered().
bool QMetaType::load(QDataStream &stream, void *data) const
Lee el objeto de este tipo del stream dado en data. Devuelve true si el objeto se ha cargado correctamente; en caso contrario devuelve false.
Normalmente, no debería necesitar llamar a esta función directamente. En su lugar, utilice QVariant's operator>>(), que se basa en load() para transmitir tipos personalizados.
Véase también save().
[constexpr] const QMetaObject *QMetaType::metaObject() const
Devuelve un QMetaObject relativo a este tipo.
Si el tipo es un tipo puntero a una subclase de QObject, flags() contiene QMetaType::PointerToQObject y esta función devuelve el QMetaObject correspondiente. Esto puede ser usado en combinación con QMetaObject::newInstance() para crear QObjects de este tipo.
Si el tipo es un Q_GADGET, flags() contiene QMetaType::IsGadget. Si el tipo es un puntero a Q_GADGET, flags() contiene QMetaType::PointerToGadget. En ambos casos, esta función devuelve su QMetaObject. Esto se puede utilizar para recuperar QMetaMethod y QMetaProperty y utilizarlos en un puntero de este tipo, por ejemplo, como se indica en QVariant::data().
Si el tipo es una enumeración, flags() contiene QMetaType::IsEnumeration. En este caso, esta función devuelve el QMetaObject del objeto que lo encierra si la enumeración fue registrada como un Q_ENUM o nullptr en caso contrario.
Véase también QMetaType::flags().
[constexpr] const char *QMetaType::name() const
Devuelve el nombre del tipo asociado a este QMetaType, o un puntero nulo si no se encontró ningún tipo coincidente. El puntero devuelto no debe ser eliminado.
Véase también typeName().
[static] template <typename From, typename To> bool QMetaType::registerConverter()
Registra la posibilidad de una conversión implícita del tipo From al tipo To en el meta type system. Devuelve true si el registro se ha realizado correctamente, en caso contrario false.
class Counter { int number = 0; public: int value() const { return number; } operator int() const { return value(); } void increment() {++number;} }; QMetaType::registerConverter<Counter, int>();
[static] template <typename From, typename To> bool QMetaType::registerConverter(To (From::*)() const function)
Registra un método function como To From::function() const como conversor del tipo From al tipo To en el meta sistema de tipos. Devuelve true si el registro tuvo éxito, en caso contrario false.
struct Coordinates { int x; int y; int z; QString toString() const { return u"[x: %1; y: %2, z: %3]"_s.arg(QString::number(x), QString::number(y), QString::number(z)); } }; QMetaType::registerConverter<Coordinates, QString>(&Coordinates::toString);
Se trata de una función sobrecargada.
[static] template <typename From, typename To> bool QMetaType::registerConverter(To (From::*)(bool *) const function)
Registra un método function como To From::function(bool *ok) const como conversor del tipo From al tipo To en el meta sistema de tipos. Devuelve true si el registro tuvo éxito, en caso contrario false.
El puntero ok puede ser utilizado por la función para indicar si la conversión tuvo éxito.
struct BigNumber { long long l; int toInt(bool *ok = nullptr) const { const bool canConvertSafely = l < std::numeric_limits<int>::max(); if (ok) *ok = canConvertSafely; return l; } }; QMetaType::registerConverter<BigNumber, int>(&BigNumber::toInt);
Se trata de una función sobrecargada.
[static] template <
typename From,
typename To,
typename UnaryFunction
>
bool QMetaType::registerConverter(UnaryFunction function)
Registra un objeto de función unario function como convertidor del tipo De al tipo A en el meta sistema de tipos. Devuelve true si el registro tuvo éxito, en caso contrario false.
function debe tomar una instancia del tipo From y devolver una instancia de To. Puede ser un puntero de función, una lambda o un objeto functor. Desde Qt 6.5, function también puede devolver una instancia de std::optional<To> para poder indicar conversiones fallidas.
QMetaType::registerConverter<CustomStringType, QString>([](const CustomStringType &str) { return QString::fromUtf8(str.data()); }); QMetaType::registerConverter<QJsonValue, CustomPointType>( [](const QJsonValue &value) -> std::optional<CustomPointType> { const auto object = value.toObject(); if (!object.contains("x") || !object.contains("y")) return std::nullopt; // The conversion fails if the required properties are missing return CustomPointType{object["x"].toDouble(), object["y"].toDouble()}; });
Se trata de una función sobrecargada.
[static, since 6.0] template <typename From, typename To> bool QMetaType::registerMutableView(To (From::*)() function)
Registra un método function como To From::function() como vista mutable del tipo To sobre el tipo From en el meta sistema de tipos. Devuelve true si el registro tuvo éxito, en caso contrario false.
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.0.
[static, since 6.0] template <
typename From,
typename To,
typename UnaryFunction
>
bool QMetaType::registerMutableView(UnaryFunction function)
Registra un objeto de función unario function como vista mutable del tipo To sobre el tipo From en el meta sistema de tipos. Devuelve true si el registro tuvo éxito, en caso contrario false.
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.0.
[since 6.5] void QMetaType::registerType() const
Registra este QMetaType en el registro de tipos para que pueda encontrarse por su nombre, utilizando QMetaType::fromName().
Esta función se introdujo en Qt 6.5.
Véase también qRegisterMetaType().
bool QMetaType::save(QDataStream &stream, const void *data) const
Escribe el objeto apuntado por data en la dirección stream. Devuelve true si el objeto se ha guardado correctamente; en caso contrario, devuelve false.
Normalmente, no debería necesitar llamar a esta función directamente. En su lugar, utilice QVariant's operator<<(), que se basa en save() para transmitir tipos personalizados.
Véase también load().
[constexpr] qsizetype QMetaType::sizeOf() const
Devuelve el tamaño del tipo en bytes (es decir, sizeof(T), donde T es el tipo real para el que se construyó esta instancia de QMetaType ).
Esta función se utiliza normalmente junto con construct() para realizar una gestión de bajo nivel de la memoria utilizada por un tipo.
Véase también QMetaType::construct() y QMetaType::alignOf().
[since 6.6] QMetaType QMetaType::underlyingType() const
Si este metatipo representa una enumeración, este método devuelve un metatipo de una clase numérica con el mismo signo y tamaño que el tipo subyacente de la enumeración. Si representa un tipo QFlags, devuelve QMetaType::Int. En todos los demás casos se devuelve un QMetaType no válido.
Esta función se introdujo en Qt 6.6.
[static, since 6.0] bool QMetaType::view(QMetaType fromType, void *from, QMetaType toType, void *to)
Crea una vista mutable sobre el objeto en from de fromType en el espacio preasignado en to tecleado toType. Devuelve true si la conversión tuvo éxito, en caso contrario false.
Esta función se introdujo en Qt 6.0.
No miembros relacionados
[since 6.4] size_t qHash(QMetaType key, size_t seed = 0)
Devuelve el valor hash para key, usando seed para sembrar el cálculo.
Esta función se introdujo en Qt 6.4.
[constexpr] template <typename T> int qMetaTypeId()
Devuelve el identificador de metatipo del tipo T en tiempo de compilación. Si el tipo no fue declarado con Q_DECLARE_METATYPE(), la compilación fallará.
Uso típico:
int id = qMetaTypeId<QString>(); // id is now QMetaType::QString id = qMetaTypeId<MyStruct>(); // compile error if MyStruct not declared
QMetaType::type() devuelve el mismo ID que qMetaTypeId(), pero hace una búsqueda en tiempo de ejecución basada en el nombre del tipo. QMetaType::type() es un poco más lento, pero la compilación tiene éxito si un tipo no está registrado.
Véase también Q_DECLARE_METATYPE() y QMetaType::type().
[constexpr] template <typename T> int qRegisterMetaType()
Llame a esta función para registrar el tipo T. Devuelve el Id del metatipo.
Ejemplo:
int id = qRegisterMetaType<MyStruct>();
Esta función requiere que T sea un tipo completamente definido en el punto en el que se llama a la función. Para los tipos puntero, también requiere que el tipo apuntado esté completamente definido. Utilice Q_DECLARE_OPAQUE_POINTER() para poder registrar punteros a tipos declarados hacia adelante.
Para utilizar el tipo T en QMetaType, QVariant, o con la API QObject::property(), no es necesario el registro.
Para utilizar el tipo T en conexiones de señales y ranuras en cola, se debe llamar a qRegisterMetaType<T>() antes de que se establezca la primera conexión. Esto se hace normalmente en el constructor de la clase que utiliza T, o en la función main().
Una vez registrado un tipo, puede encontrarse por su nombre utilizando QMetaType::fromName().
Véase también Q_DECLARE_METATYPE().
[since 6.5] int qRegisterMetaType(QMetaType meta)
Registra el metatipo meta y devuelve su Id de tipo.
Esta función requiere que T sea un tipo completamente definido en el punto en el que se llama a la función. Para tipos punteros, también requiere que el tipo apuntado esté completamente definido. Utilice Q_DECLARE_OPAQUE_POINTER() para poder registrar punteros a tipos declarados hacia adelante.
Para utilizar el tipo T en QMetaType, QVariant, o con la API QObject::property(), no es necesario el registro.
Para utilizar el tipo T en conexiones de señales y ranuras en cola, se debe llamar a qRegisterMetaType<T>() antes de que se establezca la primera conexión. Esto se hace normalmente en el constructor de la clase que utiliza T, o en la función main().
Después de que un tipo ha sido registrado, puede ser encontrado por su nombre usando QMetaType::fromName().
Esta función se introdujo en Qt 6.5.
[noexcept] bool operator!=(const QMetaType &lhs, const QMetaType &rhs)
Devuelve true si el QMetaType lhs representa un tipo diferente al QMetaType rhs , en caso contrario devuelve false.
[since 6.5] QDebug operator<<(QDebug d, QMetaType m)
Escribe el QMetaType m en el stream d, y devuelve el stream.
Esta función se introdujo en Qt 6.5.
[noexcept] bool operator==(const QMetaType &lhs, const QMetaType &rhs)
Devuelve true si el QMetaType lhs representa el mismo tipo que el QMetaType rhs , en caso contrario devuelve false.
Documentación de macros
Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(Container)
Esta macro hace que el contenedor Container sea conocido por QMetaType como un contenedor asociativo. Esto hace posible poner una instancia de Container<T, U> en un QVariant, si T y U son conocidos por QMetaType.
Nótese que todos los contenedores asociativos de Qt ya tienen soporte incorporado, y no es necesario usar esta macro con ellos. El contenedor std::map también tiene soporte incorporado.
Este ejemplo muestra un uso típico de Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE():
#include <unordered_map> Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(std::unordered_map) void someFunction() { std::unordered_map<int, bool> container; QVariant var = QVariant::fromValue(container); // ... }
Q_DECLARE_METATYPE(Type)
Esta macro hace que el tipo Type sea conocido por QMetaType siempre que proporcione un constructor público por defecto, un constructor público de copia y un destructor público. Es necesaria para utilizar el tipo Type como tipo personalizado en QVariant.
Esta macro requiere que Type sea un tipo completamente definido en el punto en el que se utiliza. Para los tipos puntero, también requiere que el tipo apuntado esté completamente definido. Utilícela junto con Q_DECLARE_OPAQUE_POINTER() para registrar punteros a tipos declarados hacia adelante.
Idealmente, esta macro debería colocarse debajo de la declaración de la clase o estructura. Si esto no es posible, puede colocarse en un fichero de cabecera privado que debe incluirse cada vez que se utilice ese tipo en QVariant.
Añadir un Q_DECLARE_METATYPE() hace que el tipo sea conocido por todas las funciones basadas en plantillas, incluyendo QVariant. Tenga en cuenta que si pretende utilizar el tipo en conexiones de señales y ranuras en cola o en el sistema de propiedades de QObject, también tendrá que llamar a qRegisterMetaType(), ya que los nombres se resuelven en tiempo de ejecución.
Este ejemplo muestra un caso típico de uso de Q_DECLARE_METATYPE():
struct MyStruct { int i; //... }; Q_DECLARE_METATYPE(MyStruct)
Si MyStruct está en un espacio de nombres, la macro Q_DECLARE_METATYPE() tiene que estar fuera del espacio de nombres:
namespace MyNamespace { struct MyStruct { //... }; } Q_DECLARE_METATYPE(MyNamespace::MyStruct)
Dado que MyStruct ya se conoce en QMetaType, puede utilizarse en QVariant:
MyStruct s; QVariant var; var.setValue(s); // copy s into the variant //... // retrieve the value MyStruct s2 = var.value<MyStruct>();
Algunos tipos se registran automáticamente y no necesitan esta macro:
- Punteros a clases derivadas de QObject
- QList<T>, QQueue<T>, QStack<T> o QSet<T> donde T es un metatipo registrado
- QHash<T1, T2>, QMap<T1, T2> o std::pair<T1, T2> donde T1 y T2 son metatipos registrados
- QPointer<T>, QSharedPointer<T>, QWeakPointer<T>, donde T es una clase que deriva de QObject
- Enumeraciones registradas con Q_ENUM o Q_FLAG
- Clases que tienen una macro Q_GADGET
Nota: Este método también registra los operadores de flujo y depuración para el tipo si son visibles en el momento del registro. Como esto se hace automáticamente en algunos lugares, se recomienda encarecidamente declarar los operadores de flujo para un tipo directamente después del propio tipo. Debido a las reglas de búsqueda dependientes de argumentos de C++, también se recomienda encarecidamente declarar los operadores en el mismo espacio de nombres que el propio tipo.
Los operadores de flujo deben tener las siguientes firmas:
QDataStream &operator<<(QDataStream &out, const MyClass &myObj); QDataStream &operator>>(QDataStream &in, MyClass &myObj);
Véase también qRegisterMetaType().
Q_DECLARE_OPAQUE_POINTER(PointerType)
Esta macro permite registrar punteros a tipos declarados hacia adelante (PointerType) con QMetaType usando Q_DECLARE_METATYPE() o qRegisterMetaType().
No use esta macro para evitar quejas o errores de moc sobre tipos de propiedad incompletos cuando el tipo apuntado se usa como un tipo completo en otros contextos del programa. Utilice Q_MOC_INCLUDE en su lugar cuando la definición completa del tipo esté disponible, pero prefiera una declaración hacia adelante en la cabecera para reducir los tiempos de compilación.
Advertencia: No utilice Q_DECLARE_OPAQUE_POINTER con punteros a un Q_OBJECT o a una clase gadget, ya que corre el riesgo de introducir información inconsistente en el sistema de meta-tipos.
Ver también Q_DECLARE_METATYPE() y qRegisterMetaType().
Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(Container)
Esta macro hace que el contenedor Container sea conocido por QMetaType como contenedor secuencial. Esto hace posible poner una instancia de Container<T> en un QVariant, si el propio T es conocido por QMetaType.
Nótese que todos los contenedores secuenciales de Qt ya tienen soporte incorporado, y no es necesario usar esta macro con ellos. Los contenedores std::vector y std::list también tienen soporte incorporado.
Este ejemplo muestra un uso típico de Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE():
#include <deque> Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(std::deque) void someFunc() { std::deque<QFile*> container; QVariant var = QVariant::fromValue(container); // ... }
Q_DECLARE_SMART_POINTER_METATYPE(SmartPointer)
Esta macro hace que el puntero inteligente SmartPointer sea conocido por QMetaType como puntero inteligente. Esto hace posible poner una instancia de SmartPointer<T> en un QVariant, si T es un tipo que hereda QObject.
Tenga en cuenta que QWeakPointer, QSharedPointer y QPointer ya tienen soporte incorporado, y no es necesario utilizar esta macro con ellos.
Este ejemplo muestra un uso típico de Q_DECLARE_SMART_POINTER_METATYPE():
#include <memory>Q_DECLARE_SMART_POINTER_METATYPE(std::shared_ptr)void someMethod() { auto smart_ptr = std::make_shared<QFile>(); QVariant var = QVariant::fromValue(smart_ptr); // ... if (var.canConvert<QObject*>()) { QObject *sp = var.valor<QObject*>(); qDebug() << sp->metaObject()->className(); // Prints 'QFile'. } }
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.