QVariant Class
La clase QVariant actúa como una unión para los tipos de datos más comunes de Qt. Más...
| Cabecera: | #include <QVariant> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- Lista de todos los miembros, incluidos los heredados
- Miembros obsoletos
- QVariant es parte de Implicitly Shared Classes.
Esta clase es igual-comparable.
Tipos Públicos
(since 6.11) class | ConstPointer |
(since 6.11) class | ConstReference |
(since 6.11) class | Pointer |
(since 6.11) class | Reference |
Funciones públicas
| QVariant() | |
| QVariant(QChar c) | |
| QVariant(const char *val) | |
| QVariant(double val) | |
| QVariant(float val) | |
| QVariant(int val) | |
| QVariant(qlonglong val) | |
| QVariant(qulonglong val) | |
| QVariant(uint val) | |
| QVariant(QMetaType type, const void *copy = nullptr) | |
(since 6.6) | QVariant(std::in_place_type_t<T>, Args &&... args) |
(since 6.6) | QVariant(std::in_place_type_t<T>, std::initializer_list<U> il, Args &&... args) |
| QVariant(QDate val) | |
| QVariant(QLatin1StringView val) | |
| QVariant(QLine val) | |
| QVariant(QLineF val) | |
| QVariant(QPoint val) | |
| QVariant(QPointF val) | |
| QVariant(QRect val) | |
| QVariant(QRectF val) | |
| QVariant(QSize val) | |
| QVariant(QSizeF val) | |
| QVariant(QTime val) | |
| QVariant(QUuid val) | |
| QVariant(bool val) | |
| QVariant(const QBitArray &val) | |
| QVariant(const QByteArray &val) | |
| QVariant(const QDateTime &val) | |
| QVariant(const QEasingCurve &val) | |
| QVariant(const QHash<QString, QVariant> &val) | |
| QVariant(const QJsonArray &val) | |
| QVariant(const QJsonDocument &val) | |
| QVariant(const QJsonObject &val) | |
| QVariant(const QJsonValue &val) | |
| QVariant(const QList<QVariant> &val) | |
| QVariant(const QLocale &l) | |
| QVariant(const QMap<QString, QVariant> &val) | |
| QVariant(const QModelIndex &val) | |
| QVariant(const QPersistentModelIndex &val) | |
| QVariant(const QRegularExpression &re) | |
| QVariant(const QString &val) | |
| QVariant(const QStringList &val) | |
| QVariant(const QUrl &val) | |
| QVariant(const QVariant &p) | |
| QVariant(QVariant &&other) | |
| ~QVariant() | |
| bool | canConvert() const |
(since 6.0) bool | canConvert(QMetaType type) const |
| bool | canView() const |
| void | clear() |
| const void * | constData() const |
(since 6.0) bool | convert(QMetaType targetType) |
| void * | data() |
| const void * | data() const |
(since 6.6) T & | emplace(Args &&... args) |
(since 6.6) T & | emplace(std::initializer_list<U> list, Args &&... args) |
| bool | isNull() const |
| bool | isValid() const |
(since 6.0) QMetaType | metaType() const |
| void | setValue(QVariant &&value) |
| void | setValue(T &&value) |
| void | setValue(const QVariant &value) |
| void | swap(QVariant &other) |
| QBitArray | toBitArray() const |
| bool | toBool() const |
| QByteArray | toByteArray() const |
| QChar | toChar() const |
| QDate | toDate() const |
| QDateTime | toDateTime() const |
| double | toDouble(bool *ok = nullptr) const |
| QEasingCurve | toEasingCurve() const |
| float | toFloat(bool *ok = nullptr) const |
| QHash<QString, QVariant> | toHash() const |
| int | toInt(bool *ok = nullptr) const |
| QJsonArray | toJsonArray() const |
| QJsonDocument | toJsonDocument() const |
| QJsonObject | toJsonObject() const |
| QJsonValue | toJsonValue() const |
| QLine | toLine() const |
| QLineF | toLineF() const |
| QList<QVariant> | toList() const |
| QLocale | toLocale() const |
| qlonglong | toLongLong(bool *ok = nullptr) const |
| QMap<QString, QVariant> | toMap() const |
| QModelIndex | toModelIndex() const |
| QPersistentModelIndex | toPersistentModelIndex() const |
| QPoint | toPoint() const |
| QPointF | toPointF() const |
| qreal | toReal(bool *ok = nullptr) const |
| QRect | toRect() const |
| QRectF | toRectF() const |
| QRegularExpression | toRegularExpression() const |
| QSize | toSize() const |
| QSizeF | toSizeF() const |
| QString | toString() const |
| QStringList | toStringList() const |
| QTime | toTime() const |
| uint | toUInt(bool *ok = nullptr) const |
| qulonglong | toULongLong(bool *ok = nullptr) const |
| QUrl | toUrl() const |
| QUuid | toUuid() const |
| int | typeId() const |
| const char * | typeName() const |
| int | userType() const |
| T | value() const & |
| T | view() |
| QVariant & | operator=(QVariant &&other) |
| QVariant & | operator=(const QVariant &variant) |
Miembros públicos estáticos
(since 6.0) QPartialOrdering | compare(const QVariant &lhs, const QVariant &rhs) |
(since 6.7) QVariant | fromMetaType(QMetaType type, const void *copy = nullptr) |
| QVariant | fromStdVariant(const std::variant<Types...> &value) |
(since 6.6) QVariant | fromStdVariant(std::variant<Types...> &&value) |
| QVariant | fromValue(const T &value) |
(since 6.6) QVariant | fromValue(T &&value) |
Relacionados No miembros
| QVariantHash | |
| QVariantList | |
| QVariantMap | |
(since 6.6) T & | get(QVariant &v) |
(since 6.6) T && | get(QVariant &&v) |
(since 6.6) const T & | get(const QVariant &v) |
(since 6.6) const T && | get(const QVariant &&v) |
(since 6.6) T * | get_if(QVariant *v) |
(since 6.6) const T * | get_if(const QVariant *v) |
| T | qvariant_cast(const QVariant &value) |
(since 6.7) T | qvariant_cast(QVariant &&value) |
| bool | operator!=(const QVariant &lhs, const QVariant &rhs) |
| QDataStream & | operator<<(QDataStream &s, const QVariant &p) |
| bool | operator==(const QVariant &lhs, const QVariant &rhs) |
| QDataStream & | operator>>(QDataStream &s, QVariant &p) |
Descripción detallada
Un objeto QVariant contiene un único valor de un único typeId() a la vez. (Algunos tipos son multivaluados, por ejemplo una lista de cadenas.) Puede averiguar qué tipo, T, contiene la variante, convertirla a un tipo diferente utilizando convert(), obtener su valor utilizando una de las funciones toT() (por ejemplo, toSize()), y comprobar si el tipo puede convertirse a un tipo particular utilizando canConvert().
Los métodos llamados toT() (por ejemplo, toInt(), toString()) son const. Si se pide el tipo almacenado, devuelven una copia del objeto almacenado. Si pide un tipo que puede generarse a partir del tipo almacenado, toT() copia y convierte y deja el objeto sin cambios. Si pide un tipo que no puede generarse a partir del tipo almacenado, el resultado depende del tipo; consulte la documentación de la función para más detalles.
A continuación se muestra un código de ejemplo para demostrar el uso de QVariant:
QDataStream out("...");QVariant v(123); // La variante contiene ahora un intint x = v.toInt(); // x = 123out<< v; // Escribe una etiqueta de tipo y un int en outv = QVariant(tr("hola")); // La variante ahora contiene un QStringint y = v.toInt(); // y = 0 ya que v no se puede convertir a un intQString s = v.toString(); // s = tr("hola") (ver QObject::tr())out<< v; // Escribe una etiqueta de tipo y un QString en out//....QDataStream in("..."); // (abriendo el flujo previamente escrito)in>> v; // Lee una variante Intint z = v.toInt(); // z = 123qDebug("Type is %s", // prints "Type is int" v.typeName()); v = v.toInt() + 100; // La variante contiene ahora el valor 223v = QVariant(QStringList()); // La variante contiene ahora una lista QStringList
Incluso puede almacenar QList<QVariant> y QMap<QString, QVariant> valores en una variante, por lo que puede construir fácilmente estructuras de datos arbitrariamente complejas de tipos arbitrarios. Esto es muy potente y versátil, pero puede resultar menos eficiente en memoria y velocidad que almacenar tipos específicos en estructuras de datos estándar.
QVariant también soporta la noción de valores nulos. Una variante es nula si la variante no contiene ningún valor inicializado, o contiene un puntero nulo.
QVariant puede ampliarse para soportar otros tipos además de los mencionados en el enum QMetaType::Type. Ver Creación de Tipos Qt Personalizados para más detalles.
Nota sobre los tipos GUI
Debido a que QVariant es parte del módulo Qt Core, no puede proporcionar funciones de conversión a tipos de datos definidos en Qt GUI, como QColor, QImage, y QPixmap. En otras palabras, no existe la función toColor(). En su lugar, puede utilizar la función de plantilla QVariant::value() o qvariant_cast(). Por ejemplo:
La conversión inversa (por ejemplo, de QColor a QVariant) es automática para todos los tipos de datos admitidos por QVariant, incluidos los tipos relacionados con GUI:
Uso consecutivo de canConvert() y convert()
Cuando se utilizan canConvert() y convert() consecutivamente, es posible que canConvert() devuelva true, pero convert() devuelva false. Esto es típicamente porque canConvert() solo informa de la capacidad general de QVariant para convertir entre tipos dados los datos adecuados; todavía es posible suministrar datos que realmente no pueden ser convertidos.
Por ejemplo, canConvert(QMetaType::fromType<int>()) devolvería true cuando se llama a una variante que contiene una cadena porque, en principio, QVariant es capaz de convertir cadenas de números a enteros. Sin embargo, si la cadena contiene caracteres no numéricos, no puede ser convertida a un entero, y cualquier intento de convertirla fallará. Por lo tanto, es importante que ambas funciones devuelvan verdadero para una conversión exitosa.
Véase también QMetaType.
Documentación de las funciones miembro
[noexcept] QVariant::QVariant()
Construye una variante inválida.
[noexcept] QVariant::QVariant(QChar c)
Construye una nueva variante con un valor char, c.
QVariant::QVariant(const char *val)
Construye una nueva variante con un valor de cadena de val. La variante crea una copia profunda de val en un QString asumiendo codificación UTF-8 en la entrada val.
Tenga en cuenta que val se convierte en un QString para almacenarlo en la variante y QVariant::userType() devolverá QMetaType::QString para la variante.
Puede desactivar este operador definiendo QT_NO_CAST_FROM_ASCII cuando compile sus aplicaciones.
[noexcept] QVariant::QVariant(double val)
Construye una nueva variante con un valor en coma flotante, val.
[noexcept] QVariant::QVariant(float val)
Construye una nueva variante con un valor en coma flotante, val.
[noexcept] QVariant::QVariant(int val)
Construye una nueva variante con un valor entero, val.
[noexcept] QVariant::QVariant(qlonglong val)
Construye una nueva variante con un valor entero long long, val.
[noexcept] QVariant::QVariant(qulonglong val)
Construye una nueva variante con un valor entero largo sin signo, val.
[noexcept] QVariant::QVariant(uint val)
Construye una nueva variante con un valor entero sin signo, val.
[explicit] QVariant::QVariant(QMetaType type, const void *copy = nullptr)
Construye una variante de tipo type, y la inicializa con una copia de *copy si copy no es nullptr (en cuyo caso, copy debe apuntar a un objeto de tipo type).
Tenga en cuenta que debe pasar la dirección del objeto que desea almacenar.
Normalmente, nunca tendrá que utilizar este constructor, utilice QVariant::fromValue() en su lugar para construir variantes a partir de los tipos de puntero representados por QMetaType::VoidStar, y QMetaType::QObjectStar.
Si type no soporta la construcción de copias y copy no es nullptr, la variante no será válida. Del mismo modo, si copy es nullptr y type no soporta construcción por defecto, la variante será inválida.
Véase también QVariant::fromMetaType, QVariant::fromValue(), y QMetaType::Type.
[explicit noexcept(...), since 6.6] template <
typename T,
typename... Args,
QVariant::if_constructible<T, Args...> = true
>
QVariant::QVariant(std::in_place_type_t<T>, Args &&... args)
Construye una nueva variante que contiene un valor de tipo T. El valor contenido se inicializa con los argumentos std::forward<Args>(args)....
Este constructor se proporciona por compatibilidad con STL/std::any.
Restricciones
Participa en la resolución de sobrecargas sólo si T puede construirse a partir de args.
Se trata de una función sobrecargada.
Esta función se introdujo en Qt 6.6.
Nota: Esta función es noexcept cuando is_noexcept_constructible<q20::remove_cvref_t<T>, Args...>::value es true.
[explicit noexcept(...), since 6.6] template <
typename T,
typename U,
typename... Args,
QVariant::if_constructible<T, std::initializer_list<U> &, Args...> = true
>
QVariant::QVariant(std::in_place_type_t<T>, std::initializer_list<U> il, Args &&... args)
Esta sobrecarga existe para soportar tipos con constructores que toman un initializer_list. Por lo demás, se comporta de forma equivalente a la sobrecarga de lista no inicializadora in_place_type_t.
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.6.
Nota: Esta función es noexcept cuando is_noexcept_constructible<q20::remove_cvref_t<T>,
std::initializer_list<U> &,
Args...
>::value es true.
[noexcept] QVariant::QVariant(QDate val)
Construye una nueva variante con un valor de fecha, val.
QVariant::QVariant(QLatin1StringView val)
Construye una nueva variante con un valor QString a partir de la cadena Latin-1 vista por val.
[noexcept(...)] QVariant::QVariant(QLine val)
Construye una nueva variante con un valor de línea de val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<sizeof(int) * 4> es true.
[noexcept(...)] QVariant::QVariant(QLineF val)
Construye una nueva variante con un valor de línea de val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<sizeof(qreal) * 4> es true.
[noexcept] QVariant::QVariant(QPoint val)
Construye una nueva variante con un valor en puntos de val.
[noexcept(...)] QVariant::QVariant(QPointF val)
Construye una nueva variante con un valor en puntos de val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<sizeof(qreal) * 2> es true.
[noexcept(...)] QVariant::QVariant(QRect val)
Construye una nueva variante con un valor rect de val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<sizeof(int) * 4> es true.
[noexcept(...)] QVariant::QVariant(QRectF val)
Construye una nueva variante con un valor rect de val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<sizeof(qreal) * 4> es true.
[noexcept] QVariant::QVariant(QSize val)
Construye una nueva variante con un valor de tamaño de val.
[noexcept(...)] QVariant::QVariant(QSizeF val)
Construye una nueva variante con un valor de tamaño de val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<sizeof(qreal) * 2> es true.
[noexcept] QVariant::QVariant(QTime val)
Construye una nueva variante con un valor de tiempo, val.
[noexcept(...)] QVariant::QVariant(QUuid val)
Construye una nueva variante con un valor uuid, val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<16> es true.
[noexcept] QVariant::QVariant(bool val)
Construye una nueva variante con un valor booleano, val.
[noexcept] QVariant::QVariant(const QBitArray &val)
Construye una nueva variante con un valor de bitarray, val.
[noexcept] QVariant::QVariant(const QByteArray &val)
Construye una nueva variante con un valor bytearray, val.
[noexcept] QVariant::QVariant(const QDateTime &val)
Construye una nueva variante con un valor de fecha/hora, val.
QVariant::QVariant(const QEasingCurve &val)
Construye una nueva variante con un valor de curva de flexión, val.
[noexcept] QVariant::QVariant(const QHash<QString, QVariant> &val)
Construye una nueva variante con un hash de QVariants, val.
[noexcept] QVariant::QVariant(const QJsonArray &val)
Construye una nueva variante con un valor de matriz json, val.
QVariant::QVariant(const QJsonDocument &val)
Construye una nueva variante con un valor de documento json, val.
[noexcept] QVariant::QVariant(const QJsonObject &val)
Construye una nueva variante con un valor de objeto json, val.
[noexcept(...)] QVariant::QVariant(const QJsonValue &val)
Construye una nueva variante con un valor json, val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<sizeof(CborValueStandIn)> es true.
[noexcept] QVariant::QVariant(const QList<QVariant> &val)
Construye una nueva variante con un valor de lista, val.
[noexcept] QVariant::QVariant(const QLocale &l)
Construye una nueva variante con un valor de configuración regional, l.
[noexcept] QVariant::QVariant(const QMap<QString, QVariant> &val)
Construye una nueva variante con un mapa de QVariants, val.
[noexcept(...)] QVariant::QVariant(const QModelIndex &val)
Construye una nueva variante con un valor QModelIndex, val.
Nota: Esta función es noexcept cuando Private::FitsInInternalSize<8 + 2 * sizeof(quintptr)> es true.
QVariant::QVariant(const QPersistentModelIndex &val)
Construye una nueva variante con un valor QPersistentModelIndex, val.
[noexcept] QVariant::QVariant(const QRegularExpression &re)
Construye una nueva variante con el valor de la expresión regular re.
[noexcept] QVariant::QVariant(const QString &val)
Construye una nueva variante con un valor de cadena, val.
[noexcept] QVariant::QVariant(const QStringList &val)
Construye una nueva variante con un valor de lista de cadenas, val.
[noexcept] QVariant::QVariant(const QUrl &val)
Construye una nueva variante con un valor url de val.
QVariant::QVariant(const QVariant &p)
Construye una copia de la variante, p, pasada como argumento a este constructor.
[noexcept] QVariant::QVariant(QVariant &&other)
Move-construye una instancia de QVariant, haciendo que apunte al mismo objeto que other estaba apuntando.
[noexcept] QVariant::~QVariant()
Destruye el QVariant y el objeto contenido.
template <typename T> bool QVariant::canConvert() const
Devuelve true si la variante puede convertirse al tipo de plantilla T, en caso contrario false.
Ejemplo:
QVariant v = 42; v.canConvert<int>(); // returns true v.canConvert<QString>(); // returns true MyCustomStruct s; v.setValue(s); v.canConvert<int>(); // returns false v.canConvert<MyCustomStruct>(); // returns true
Un QVariant que contenga un puntero a un tipo derivado de QObject también devolverá true para esta función si un qobject_cast al tipo de plantilla T tendría éxito. Tenga en cuenta que esto sólo funciona para las subclases de QObject que utilizan la macro Q_OBJECT.
Véase también convert().
[since 6.0] bool QVariant::canConvert(QMetaType type) const
Devuelve true si el tipo de la variante se puede convertir al tipo solicitado, type. Esta conversión se realiza automáticamente al llamar a los métodos toInt(), toBool(), ....
Observe que esta función sólo opera sobre el tipo de la variante, no sobre su contenido. Indica si existe una ruta de conversión de esta variante a type, no que la conversión tendrá éxito cuando se intente.
Esta función se introdujo en Qt 6.0.
Véase también QMetaType::canConvert().
template <typename T> bool QVariant::canView() const
Devuelve true si se puede crear una vista mutable del tipo de plantilla T en esta variante, en caso contrario false.
Véase también value().
void QVariant::clear()
Convierte esta variante al tipo QMetaType::UnknownType y libera los recursos utilizados.
[static, since 6.0] QPartialOrdering QVariant::compare(const QVariant &lhs, const QVariant &rhs)
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.
Si las variantes contienen datos con un metatotipo diferente, los valores se consideran desordenados a menos que ambos sean de tipo numérico o puntero, en cuyo caso se utilizarán las reglas de comparación numérica o puntero habituales.
Nota : : Si se realiza una comparación numérica y al menos un valor es NaN, se devuelve QPartialOrdering::Unordered.
Si ambas variantes contienen datos del mismo metatipo, el método utilizará el método QMetaType::compare para determinar el orden de las dos variantes, lo que también puede indicar que no puede establecer un orden entre los dos valores.
Esta función se introdujo en Qt 6.0.
Véase también QMetaType::compare() y QMetaType::isOrdered().
Devuelve un puntero al objeto contenido como un void* genérico en el que no se puede escribir.
Véase también get_if() y QMetaType.
[since 6.0] bool QVariant::convert(QMetaType targetType)
Convierte la variante al tipo solicitado, targetType. Si no se puede realizar la conversión, la variante se cambia al tipo solicitado, pero se deja en un estado nulo similar al construido por QVariant(Type).
Devuelve true si el tipo actual de la variante se ha convertido con éxito; en caso contrario, devuelve false.
Un QVariant que contenga un puntero a un tipo derivado de QObject también se convertirá y devolverá true para esta función si un qobject_cast al tipo descrito por targetType tuviera éxito. Tenga en cuenta que esto sólo funciona para las subclases de QObject que utilizan la macro Q_OBJECT.
Nota: la conversión de QVariants que son null debido a que no han sido inicializadas o han fallado una conversión previa siempre fallará, cambiando el tipo, permaneciendo null, y devolviendo false.
Esta función se introdujo en Qt 6.0.
Véase también canConvert() y clear().
void *QVariant::data()
Devuelve un puntero al objeto contenido como un void* genérico en el que se puede escribir.
Esta función separa el QVariant. Cuando se llama a un null-QVariant, el QVariant no será nulo después de la llamada.
Véase también get_if() y QMetaType.
[since 6.6] template <
typename T,
typename... Args,
QVariant::if_constructible<T, Args...> = true
>
T &QVariant::emplace(Args &&... args)
Sustituye el objeto actualmente contenido en *this por un objeto de tipo T, construido a partir de args... . Si *this no era nulo, el objeto anteriormente contenido se destruye primero. Si es posible, este método reutilizará la memoria asignada por QVariant. Devuelve una referencia al objeto recién creado.
Esta función se introdujo en Qt 6.6.
[since 6.6] template <
typename T,
typename U,
typename... Args,
QVariant::if_constructible<T, std::initializer_list<U> &, Args...> = true
>
T &QVariant::emplace(std::initializer_list<U> list, Args &&... args)
Esta sobrecarga existe para soportar tipos con constructores que toman un initializer_list. Por lo demás, se comporta de forma equivalente a la sobrecarga de lista no inicializadora.
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.6.
[static, since 6.7] QVariant QVariant::fromMetaType(QMetaType type, const void *copy = nullptr)
Crea una variante de tipo type, y la inicializa con una copia de *copy si copy no es nullptr (en cuyo caso, copy debe apuntar a un objeto de tipo type).
Tenga en cuenta que debe pasar la dirección del objeto que desea almacenar.
Normalmente, nunca tendrá que utilizar este constructor, utilice QVariant::fromValue() en su lugar para construir variantes a partir de los tipos de puntero representados por QMetaType::VoidStar, y QMetaType::QObjectStar.
Si type no soporta la construcción de copias y copy no es nullptr, la variante no será válida. Del mismo modo, si copy es nullptr y type no soporta construcción por defecto, la variante será inválida.
Devuelve el QVariant creado como se ha descrito anteriormente.
Esta función se introdujo en Qt 6.7.
Véase también QVariant::fromValue() y QMetaType::Type.
[static] template <typename... Types> QVariant QVariant::fromStdVariant(const std::variant<Types...> &value)
Devuelve un QVariant con el tipo y valor de la variante activa de value. Si el tipo activo es std::monostate se devuelve un QVariant por defecto.
Nota: Con este método no es necesario registrar la variante como un metatipo de Qt, ya que la variante std::se resuelve antes de ser almacenada. Sin embargo, los tipos de componentes sí deben registrarse.
Véase también fromValue().
[static, since 6.6] template <typename... Types> QVariant QVariant::fromStdVariant(std::variant<Types...> &&value)
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.6.
[static] template <typename T> QVariant QVariant::fromValue(const T &value)
Devuelve un QVariant que contiene una copia de value. En caso contrario, se comporta exactamente igual que setValue().
Ejemplo:
MyCustomStruct s; return QVariant::fromValue(s);
Véase también setValue() y value().
[static, since 6.6] template <typename T, QVariant::if_rvalue<T> = true> QVariant QVariant::fromValue(T &&value)
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.6.
bool QVariant::isNull() const
Devuelve true si se trata de una variante nula, false en caso contrario.
Una variante se considera nula si no contiene ningún valor inicializado o un puntero nulo.
Nota: Este comportamiento se ha cambiado desde Qt 5, donde isNull() también devolvía true si la variante contenía un objeto de un tipo incorporado con un método isNull() que devolvía true para ese objeto.
Véase también convert().
bool QVariant::isValid() const
Devuelve true si el tipo de almacenamiento de esta variante no es QMetaType::UnknownType; en caso contrario devuelve false.
[since 6.0] QMetaType QVariant::metaType() const
Devuelve el QMetaType del valor almacenado en la variante.
Esta función se introdujo en Qt 6.0.
void QVariant::setValue(QVariant &&value)
Mueve value sobre este QVariant. Es equivalente a simplemente mover asignando value a este QVariant.
Véase también value().
template <typename T, typename = std::enable_if_t<!std::is_same_v<std::decay_t<T>, QVariant>>> void QVariant::setValue(T &&value)
Almacena una copia de value. Si T es un tipo que QVariant no soporta, se utiliza QMetaType para almacenar el valor. Se producirá un error de compilación si QMetaType no maneja el tipo.
Ejemplo:
QVariant v; v.setValue(5); int i = v.toInt(); // i is now 5 QString s = v.toString(); // s is now "5" MyCustomStruct c; v.setValue(c); //... MyCustomStruct c2 = v.value<MyCustomStruct>();
Véase también value(), fromValue(), y canConvert().
void QVariant::setValue(const QVariant &value)
Copia value sobre este QVariant. Equivale simplemente a asignar value a este QVariant.
[noexcept] void QVariant::swap(QVariant &other)
Cambia esta variante por other. Esta operación es muy rápida y nunca falla.
QBitArray QVariant::toBitArray() const
Devuelve la variante como QBitArray si la variante tiene userType() QMetaType::QBitArray; en caso contrario devuelve una matriz de bits vacía.
Véase también canConvert() y convert().
bool QVariant::toBool() const
Devuelve la variante como bool si la variante tiene userType() Bool.
Devuelve true si la variante tiene userType() QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::UInt, o QMetaType::ULongLong y el valor es distinto de cero, o si la variante tiene el tipo QMetaType::QString o QMetaType::QByteArray y su contenido en minúsculas no es uno de los siguientes: vacío, "0" o "false"; en caso contrario devuelve false.
Véase también canConvert() y convert().
QByteArray QVariant::toByteArray() const
Devuelve la variante como QByteArray si la variante tiene userType() QMetaType::QByteArray o QMetaType::QString (convertida usando QString::fromUtf8()); en caso contrario devuelve una matriz de bytes vacía.
Véase también canConvert() y convert().
QChar QVariant::toChar() const
Devuelve la variante como QChar si la variante tiene userType() QMetaType::QChar, QMetaType::Int, o QMetaType::UInt; en caso contrario devuelve un QChar inválido.
Véase también canConvert() y convert().
QDate QVariant::toDate() const
Devuelve la variante como QDate si la variante tiene userType() QMetaType::QDate, QMetaType::QDateTime, o QMetaType::QString; en caso contrario devuelve una fecha inválida.
Si metaType() es QMetaType::QString, se devolverá una fecha no válida si la cadena no puede analizarse como una fecha con formato Qt::ISODate.
Véase también canConvert() y convert().
QDateTime QVariant::toDateTime() const
Devuelve la variante como QDateTime si la variante tiene userType() QMetaType::QDateTime, QMetaType::QDate, o QMetaType::QString; en caso contrario devuelve una fecha/hora inválida.
Si metaType() es QMetaType::QString, se devolverá una fecha/hora no válida si la cadena no puede analizarse como una fecha/hora con formato Qt::ISODate.
Véase también canConvert() y convert().
double QVariant::toDouble(bool *ok = nullptr) const
Devuelve la variante como un doble si la variante tiene userType() QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, o QMetaType::ULongLong; en caso contrario devuelve 0.0.
Si ok no es nulo: *ok se pone a verdadero si el valor puede convertirse a doble; en caso contrario *ok se pone a falso.
Véase también canConvert() y convert().
QEasingCurve QVariant::toEasingCurve() const
Devuelve la variante como QEasingCurve si la variante tiene userType() QMetaType::QEasingCurve; en caso contrario devuelve una curva de flexión por defecto.
Véase también canConvert() y convert().
float QVariant::toFloat(bool *ok = nullptr) const
Devuelve la variante como float si la variante tiene userType() QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, o QMetaType::ULongLong; en caso contrario devuelve 0.0.
Si ok no es nulo: *ok se pone a verdadero si el valor puede convertirse a doble; en caso contrario *ok se pone a falso.
Véase también canConvert() y convert().
QHash<QString, QVariant> QVariant::toHash() const
Devuelve la variante como QHash<QString, QVariant> si la variante tiene metaType() QMetaType::QVariantHash. Si no la tiene, QVariant intentará convertir el tipo en un hash y luego devolverlo. Esto tendrá éxito para cualquier tipo que haya registrado un convertidor a QVariantHash o que haya sido declarado como contenedor asociativo utilizando Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE. Si ninguna de estas condiciones se cumple, esta función devolverá un hash vacío.
Véase también canConvert() y convert().
int QVariant::toInt(bool *ok = nullptr) const
Devuelve la variante como un int si la variante tiene userType() QMetaType::Int, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, o QMetaType::ULongLong; en caso contrario devuelve 0.
Si ok no es nulo: *ok se pone a verdadero si el valor puede convertirse a un int; en caso contrario *ok se pone a falso.
Advertencia: Si el valor es convertible a un QMetaType::LongLong pero es demasiado grande para ser representado en un int, el desbordamiento aritmético resultante no se reflejará en ok. Una solución sencilla es utilizar QString::toInt().
Véase también canConvert() y convert().
QJsonArray QVariant::toJsonArray() const
Devuelve la variante como QJsonArray si la variante tiene userType() QJsonArray; en caso contrario devuelve un QJsonArray construido por defecto.
Véase también canConvert() y convert().
QJsonDocument QVariant::toJsonDocument() const
Devuelve la variante como QJsonDocument si la variante tiene userType() QJsonDocument; en caso contrario devuelve un QJsonDocument construido por defecto.
Véase también canConvert() y convert().
QJsonObject QVariant::toJsonObject() const
Devuelve la variante como QJsonObject si la variante tiene userType() QJsonObject; en caso contrario devuelve un QJsonObject construido por defecto.
Véase también canConvert() y convert().
QJsonValue QVariant::toJsonValue() const
Devuelve la variante como QJsonValue si la variante tiene userType() QJsonValue; en caso contrario devuelve un QJsonValue construido por defecto.
Véase también canConvert() y convert().
QLine QVariant::toLine() const
Devuelve la variante como QLine si la variante tiene userType() QMetaType::QLine; en caso contrario devuelve un QLine inválido.
Véase también canConvert() y convert().
QLineF QVariant::toLineF() const
Devuelve la variante como QLineF si la variante tiene userType() QMetaType::QLineF; en caso contrario devuelve un QLineF inválido.
Véase también canConvert() y convert().
QList<QVariant> QVariant::toList() const
Devuelve la variante como QVariantList si la variante tiene userType() QMetaType::QVariantList. Si no la tiene, QVariant intentará convertir el tipo a una lista y luego devolverla. Esto tendrá éxito para cualquier tipo que haya registrado un convertidor a QVariantList o que haya sido declarado como contenedor secuencial utilizando Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE. Si ninguna de estas condiciones se cumple, esta función devolverá una lista vacía.
Véase también canConvert() y convert().
QLocale QVariant::toLocale() const
Devuelve la variante como QLocale si la variante tiene userType() QMetaType::QLocale; en caso contrario devuelve un QLocale inválido.
Véase también canConvert() y convert().
qlonglong QVariant::toLongLong(bool *ok = nullptr) const
Devuelve la variante como un long long int si la variante tiene userType() QMetaType::LongLong, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::QString, QMetaType::UInt, o QMetaType::ULongLong; en caso contrario devuelve 0.
Si ok no es nulo: *ok se pone a verdadero si el valor puede convertirse a un int; en caso contrario *ok se pone a falso.
Véase también canConvert() y convert().
QMap<QString, QVariant> QVariant::toMap() const
Devuelve la variante como QVariantMap si la variante tiene metaType() QMetaType::QVariantMap. En caso contrario, QVariant intentará convertir el tipo en un mapa y devolverlo. Esto tendrá éxito para cualquier tipo que haya registrado un convertidor a QVariantMap o que haya sido declarado como contenedor asociativo utilizando Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE. Si ninguna de estas condiciones se cumple, esta función devolverá un mapa vacío.
Véase también canConvert() y convert().
QModelIndex QVariant::toModelIndex() const
Devuelve la variante como QModelIndex si la variante tiene userType() QModelIndex; en caso contrario devuelve un QModelIndex construido por defecto.
Véase también canConvert(), convert(), y toPersistentModelIndex().
QPersistentModelIndex QVariant::toPersistentModelIndex() const
Devuelve la variante como QPersistentModelIndex si la variante tiene userType() QPersistentModelIndex; en caso contrario devuelve un QPersistentModelIndex construido por defecto.
Véase también canConvert(), convert(), y toModelIndex().
QPoint QVariant::toPoint() const
Devuelve la variante como QPoint si la variante tiene userType() QMetaType::QPoint o QMetaType::QPointF; en caso contrario devuelve un QPoint nulo.
Véase también canConvert() y convert().
QPointF QVariant::toPointF() const
Devuelve la variante como QPointF si la variante tiene userType() QMetaType::QPoint o QMetaType::QPointF; en caso contrario devuelve un QPointF nulo.
Véase también canConvert() y convert().
qreal QVariant::toReal(bool *ok = nullptr) const
Devuelve la variante como qreal si la variante tiene userType() QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, o QMetaType::ULongLong; en caso contrario devuelve 0.0.
Si ok no es nulo: *ok se pone a verdadero si el valor puede convertirse a doble; en caso contrario *ok se pone a falso.
Véase también canConvert() y convert().
QRect QVariant::toRect() const
Devuelve la variante como QRect si la variante tiene userType() QMetaType::QRect; en caso contrario devuelve un QRect inválido.
Véase también canConvert() y convert().
QRectF QVariant::toRectF() const
Devuelve la variante como QRectF si la variante tiene userType() QMetaType::QRect o QMetaType::QRectF; en caso contrario devuelve un QRectF inválido.
Véase también canConvert() y convert().
QRegularExpression QVariant::toRegularExpression() const
Devuelve la variante como QRegularExpression si la variante tiene userType() QRegularExpression; en caso contrario devuelve un QRegularExpression vacío.
Véase también canConvert() y convert().
QSize QVariant::toSize() const
Devuelve la variante como QSize si la variante tiene userType() QMetaType::QSize; en caso contrario devuelve un QSize inválido.
Véase también canConvert() y convert().
QSizeF QVariant::toSizeF() const
Devuelve la variante como QSizeF si la variante tiene userType() QMetaType::QSizeF; en caso contrario devuelve un QSizeF inválido.
Véase también canConvert() y convert().
QString QVariant::toString() const
Devuelve la variante como QString si la variante tiene un userType() incluyendo, pero no limitado a:
QMetaType::QString, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::QDate, QMetaType::QDateTime, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QStringList, QMetaType::QTime, QMetaType::UInt, o QMetaType::ULongLong.
Llamar a QVariant::toString() en una variante no soportada devuelve una cadena vacía.
Véase también canConvert() y convert().
QStringList QVariant::toStringList() const
Devuelve la variante como QStringList si la variante tiene userType() QMetaType::QStringList, QMetaType::QString, o QMetaType::QVariantList de un tipo que pueda convertirse a QString; en caso contrario devuelve una lista vacía.
Véase también canConvert() y convert().
QTime QVariant::toTime() const
Devuelve la variante como QTime si la variante tiene userType() QMetaType::QTime, QMetaType::QDateTime, o QMetaType::QString; en caso contrario devuelve una hora no válida.
Si metaType() es QMetaType::QString, se devolverá una hora no válida si la cadena no puede analizarse como una hora con formato Qt::ISODate.
Véase también canConvert() y convert().
uint QVariant::toUInt(bool *ok = nullptr) const
Devuelve la variante como un int sin signo si la variante tiene userType() QMetaType::UInt, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, o QMetaType::ULongLong; en caso contrario devuelve 0.
Si ok no es nulo: *ok se pone a verdadero si el valor puede convertirse a un int sin signo; en caso contrario *ok se pone a falso.
Advertencia: Si el valor es convertible a un QMetaType::ULongLong pero es demasiado grande para ser representado en un unsigned int, el desbordamiento aritmético resultante no se reflejará en ok. Una solución sencilla es utilizar QString::toUInt().
Véase también canConvert() y convert().
qulonglong QVariant::toULongLong(bool *ok = nullptr) const
Devuelve la variante como un unsigned long long int si la variante tiene metaType() QMetaType::ULongLong, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, o QMetaType::UInt; en caso contrario devuelve 0.
Si ok no es nulo: *ok se pone a verdadero si el valor puede convertirse a un int; en caso contrario *ok se pone a falso.
Véase también canConvert() y convert().
QUrl QVariant::toUrl() const
Devuelve la variante como QUrl si la variante tiene userType() QMetaType::QUrl; en caso contrario devuelve un QUrl inválido.
Véase también canConvert() y convert().
QUuid QVariant::toUuid() const
Devuelve la variante como QUuid si la variante tiene metaType() QMetaType::QUuid, QMetaType::QByteArray o QMetaType::QString; en caso contrario devuelve un QUuid construido por defecto.
Véase también canConvert() y convert().
const char *QVariant::typeName() const
Devuelve el nombre del tipo almacenado en la variante. Las cadenas devueltas describen el tipo de datos C++ utilizado para almacenar los datos: por ejemplo, "QFont", "QString", o "QVariantList". Una variante no válida devuelve 0.
Devuelve el tipo de almacenamiento del valor almacenado en la variante. Es lo mismo que metaType().id().
Véase también metaType().
template <typename T> T QVariant::value() const &
Devuelve el valor almacenado convertido al tipo de plantilla T. Llame a canConvert() para averiguar si un tipo se puede convertir. Si el valor no se puede convertir, se devolverá un valor construido por defecto.
Si el tipo T es compatible con QVariant, esta función se comporta exactamente igual que toString(), toInt(), etc.
Ejemplo:
QVariant v; MyCustomStruct c; if (v.canConvert<MyCustomStruct>()) c = v.value<MyCustomStruct>(); v = 7; int i = v.value<int>(); // same as v.toInt() QString s = v.value<QString>(); // same as v.toString(), s is now "7" MyCustomStruct c2 = v.value<MyCustomStruct>(); // conversion failed, c2 is empty
Si el QVariant contiene un puntero a un tipo derivado de QObject entonces T puede ser cualquier tipo QObject. Si el puntero almacenado en QVariant puede ser qobject_cast a T, entonces se devuelve ese resultado. En caso contrario se devuelve nullptr. Tenga en cuenta que esto sólo funciona para las subclases de QObject que utilizan la macro Q_OBJECT.
Si QVariant contiene un contenedor secuencial y T es QVariantList, los elementos del contenedor se convertirán en QVariants y se devolverán como QVariantList.
QList<int> intLista = {7, 11, 42};QVariant variante = QVariant::fromValue(intList);if (variant.canConvert<QVariantList>()) { QMetaSequence::Iterable iterable = variant.value<QMetaSequence::Iterable>(); // Puede usar C++11 range-for: for(const QVariant &v: iterable) { qDebug() << v; } // Puede utilizar iteradores: QMetaSequence::Iterable::const_iterator it = iterable.begin(); const QMetaSequence::Iterable::const_iterator end = iterable.end(); for ( ; it != end; ++it) { qDebug() << *it; } }
Véase también setValue(), fromValue(), canConvert() y Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().
template <typename T> T QVariant::view()
Devuelve una vista mutable de tipo plantilla T sobre el valor almacenado. Llame a canView() para averiguar si se admite dicha vista. Si no se puede crear tal vista, devuelve el valor almacenado convertido al tipo de plantilla T. Llame a canConvert() para averiguar si se puede convertir un tipo. Si el valor no puede visualizarse ni convertirse, se devolverá un valor construido por defecto.
Véase también canView() y Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().
[noexcept] QVariant &QVariant::operator=(QVariant &&other)
Mover-asigna other a esta instancia QVariant.
QVariant &QVariant::operator=(const QVariant &variant)
Asigna el valor de la variante variant a esta variante.
No miembros relacionados
[alias] QVariantHash
Sinónimo de QHash<QString, QVariant>.
[alias] QVariantList
[alias] QVariantMap
Sinónimo de QMap<QString, QVariant>.
[since 6.6] template <typename T> T &get(QVariant &v)
[since 6.6] template <typename T> const T &get(const QVariant &v)
[since 6.6] template <typename T> T &&get(QVariant &&v)
[since 6.6] template <typename T> const T &&get(const QVariant &&v)
Si v contiene un objeto de tipo T, devuelve una referencia al objeto contenido, de lo contrario la llamada tiene un comportamiento indefinido.
Las sobrecargas que toman un mutable v separan v: Cuando se llama sobre un null v con tipo coincidente T, v no será null después de la llamada.
Estas funciones se proporcionan por compatibilidad con std::variant.
Estas funciones se introdujeron en Qt 6.6.
Véase también get_if() y data().
[noexcept, since 6.6] template <typename T> const T *get_if(const QVariant *v)
[noexcept, since 6.6] template <typename T> T *get_if(QVariant *v)
Si v contiene un objeto de tipo T, devuelve un puntero al objeto contenido, en caso contrario devuelve nullptr.
La sobrecarga que toma un mutable v separa v: Cuando se llama sobre un null v con tipo coincidente T, v no será nulo después de la llamada.
Estas funciones se proporcionan por compatibilidad con std::variant.
Estas funciones se introdujeron en Qt 6.6.
Véase también data().
template <typename T> T qvariant_cast(const QVariant &value)
Devuelve el value dado convertido al tipo de plantilla T.
Esta función es equivalente a QVariant::value().
Véase también QVariant::value().
[since 6.7] template <typename T> T qvariant_cast(QVariant &&value)
Devuelve el value dado convertido al tipo de plantilla T.
Se trata de una función sobrecargada.
Esta función se introdujo en Qt 6.7.
[noexcept] bool operator!=(const QVariant &lhs, const QVariant &rhs)
Devuelve false si lhs y rhs son iguales; en caso contrario devuelve true.
QVariant utiliza el operador de igualdad del contenido metaType() para comprobar la igualdad.
Las variantes de tipos diferentes siempre se compararán como no iguales, salvo algunas excepciones:
- Si ambos tipos son numéricos (enteros y números en coma flotante) Qt comparará esos tipos usando las reglas estándar de promoción de tipos de C++.
- Si un tipo es numérico y el otro QString, Qt intentará convertir QString a un tipo numérico coincidente y si tiene éxito los comparará.
- Si ambas variantes contienen punteros a tipos derivados de QObject, QVariant comprobará si los tipos están relacionados y apuntan al mismo objeto.
QDataStream &operator<<(QDataStream &s, const QVariant &p)
Escribe una variante p en el flujo s.
Véase también Formato de los operadores QDataStream.
[noexcept] bool operator==(const QVariant &lhs, const QVariant &rhs)
Devuelve true si lhs y rhs son iguales; en caso contrario devuelve false.
QVariant utiliza el operador de igualdad del contenido metaType() para comprobar la igualdad.
Las variantes de tipos diferentes siempre se compararán como no iguales, salvo algunas excepciones:
- Si ambos tipos son numéricos (enteros y números en coma flotante) Qt comparará esos tipos usando las reglas estándar de promoción de tipos de C++.
- Si un tipo es numérico y el otro QString, Qt intentará convertir QString a un tipo numérico coincidente y si tiene éxito los comparará.
- Si ambas variantes contienen punteros a tipos derivados de QObject, QVariant comprobará si los tipos están relacionados y apuntan al mismo objeto.
El resultado de la función no se ve afectado por el resultado de QVariant::isNull, lo que significa que dos valores pueden ser iguales aunque uno de ellos sea nulo y otro no.
QDataStream &operator>>(QDataStream &s, QVariant &p)
Lee una variante p del flujo s.
Nota: Si el flujo contiene tipos que no son los incorporados (ver QMetaType::Type), esos tipos deben ser registrados usando qRegisterMetaType() o QMetaType::registerType() antes de que la variante pueda ser cargada correctamente. Si se encuentra un tipo no registrado, QVariant activará la bandera corrupto en el flujo, detendrá el procesamiento e imprimirá una advertencia. Por ejemplo, para QList<int> imprimiría lo siguiente:
QVariant::load: tipo de usuario desconocido con nombre QList<int>
Ver también Formato de los operadores QDataStream.
© 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.