Класс QVariant
Класс QVariant действует как объединение для самых распространённых типов данных Qt. Подробнее...
| Заголовок: | #include <QVariant> |
| qmake: | QT += core |
Открытые функции
| QVariant(QVariant &&other) | |
| QVariant(const QPersistentModelIndex &val) | |
| QVariant(const QModelIndex &val) | |
| QVariant(const QJsonDocument &val) | |
| QVariant(const QJsonArray &val) | |
| QVariant(const QJsonObject &val) | |
| QVariant(const QJsonValue &val) | |
| QVariant(const QUuid &val) | |
| QVariant(const QEasingCurve &val) | |
| QVariant(const QUrl &val) | |
| QVariant(const QRegularExpression &re) | |
| QVariant(const QRegExp ®Exp) | |
| QVariant(const QLocale &l) | |
| QVariant(const QRectF &val) | |
| QVariant(const QRect &val) | |
| QVariant(const QLineF &val) | |
| QVariant(const QLine &val) | |
| QVariant(const QPointF &val) | |
| QVariant(const QPoint &val) | |
| QVariant(const QSizeF &val) | |
| QVariant(const QSize &val) | |
| QVariant(const QHash<QString, QVariant> &val) | |
| QVariant(const QMap<QString, QVariant> &val) | |
| QVariant(const QList<QVariant> &val) | |
| QVariant(const QDateTime &val) | |
| QVariant(const QTime &val) | |
| QVariant(const QDate &val) | |
| QVariant(QChar c) | |
| QVariant(const QStringList &val) | |
| QVariant(QLatin1String val) | |
| QVariant(const QString &val) | |
| QVariant(const QBitArray &val) | |
| QVariant(const QByteArray &val) | |
| QVariant(const char *val) | |
| QVariant(float val) | |
| QVariant(double val) | |
| QVariant(bool val) | |
| QVariant(qulonglong val) | |
| QVariant(qlonglong val) | |
| QVariant(uint val) | |
| QVariant(int val) | |
| QVariant(QDataStream &s) | |
| QVariant(const QVariant &p) | |
| QVariant(int typeId, const void *copy) | |
| QVariant(QVariant::Type type) | |
| QVariant() | |
| QVariant & | operator=(QVariant &&other) |
| QVariant & | operator=(const QVariant &variant) |
| ~QVariant() | |
| bool | canConvert(int targetTypeId) const |
| bool | canConvert() const |
| void | clear() |
| bool | convert(int targetTypeId) |
| bool | isNull() const |
| bool | isValid() const |
| void | setValue(const T &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 |
| QRegExp | toRegExp() 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 |
| QVariant::Type | type() const |
| const char * | typeName() const |
| int | userType() const |
| T | value() const |
| bool | operator!=(const QVariant &v) const |
| bool | operator<(const QVariant &v) const |
| bool | operator<=(const QVariant &v) const |
| bool | operator==(const QVariant &v) const |
| bool | operator>(const QVariant &v) const |
| bool | operator>=(const QVariant &v) const |
Статические публичные члены
| QVariant | fromStdVariant(const std::variant<Types...> &value) |
| QVariant | fromValue(const T &value) |
| QVariant::Type | nameToType(const char *name) |
| const char * | typeToName(int typeId) |
Связанные нечлены
| typedef | QVariantHash |
| typedef | QVariantList |
| typedef | QVariantMap |
| T | qvariant_cast(const QVariant &value) |
| bool | operator!=(const QVariant &v1, const QVariant &v2) |
| bool | operator==(const QVariant &v1, const QVariant &v2) |
Подробное описание
Поскольку C++ запрещает объединения, включающие типы с конструкторами или деструкторами по умолчанию, большинство интересных классов Qt не могут использоваться в объединениях. Без QVariant это была бы проблема для QObject::property() и для работы с базами данных и т. д.
Объект QVariant хранит единственное значение единственного типа type() за раз. (Некоторые типы type() являются многозначными, например, список строк.) Вы можете узнать, какой тип, T, хранит переменная, преобразовать его в другой тип с помощью convert(), получить его значение с помощью одной из функций toT() (например, toSize()) и проверить, может ли тип быть преобразован в конкретный тип с помощью canConvert().
Методы с именем toT() (например, toInt(), toString()) являются константными. Если вы запрашиваете хранимый тип, они возвращают копию хранимого объекта. Если вы запрашиваете тип, который может быть сгенерирован из хранимого типа, toT() копирует, преобразует и оставляет сам объект неизменным. Если вы запрашиваете тип, который не может быть сгенерирован из хранимого типа, результат зависит от типа; см. документацию по функции для получения подробной информации.
Вот пример кода, демонстрирующего использование QVariant:
QDataStream out(...);
QVariant v(123); // The variant now contains an int
int x = v.toInt(); // x = 123
out << v; // Writes a type tag and an int to out
v = QVariant("hello"); // The variant now contains a QByteArray
v = QVariant(tr("hello")); // The variant now contains a QString
int y = v.toInt(); // y = 0 since v cannot be converted to an int
QString s = v.toString(); // s = tr("hello") (see QObject::tr())
out << v; // Writes a type tag and a QString to out
...
QDataStream in(...); // (opening the previously written stream)
in >> v; // Reads an Int variant
int z = v.toInt(); // z = 123
qDebug("Type is %s", // prints "Type is int"
v.typeName());
v = v.toInt() + 100; // The variant now hold the value 223
v = QVariant(QStringList()); Вы даже можете хранить QList<QVariant> и QMap<QString, QVariant> значения в переменной, поэтому вы можете легко создавать произвольно сложные структуры данных произвольных типов. Это очень мощно и универсально, но может оказаться менее эффективным с точки зрения памяти и скорости по сравнению с хранением определенных типов в стандартных структурах данных.
QVariant также поддерживает понятие нулевых значений, где у вас может быть определенный тип без установленного значения. Однако обратите внимание, что типы QVariant могут быть преобразованы только тогда, когда для них было задано значение.
QVariant x, y(QString()), z(QString(""));
x.convert(QVariant::Int);
// x.isNull() == true
// y.isNull() == true, z.isNull() == false QVariant можно расширить для поддержки других типов, помимо тех, что упомянуты в перечислении Type. Подробности см. в разделе Создание пользовательских типов Qt.
Примечание по типам GUI
Поскольку QVariant является частью модуля Qt Core, он не может предоставить функции преобразования в типы данных, определённые в Qt GUI, такие как QColor, QImage и QPixmap. Другими словами, нет функции toColor(). Вместо этого вы можете использовать функцию QVariant::value() или шаблонную функцию qvariant_cast(). Например:
QVariant variant; ... QColor color = variant.value<QColor>();
Обратное преобразование (например, от QColor к QVariant) является автоматическим для всех типов данных, поддерживаемых QVariant, включая типы, связанные с GUI:
QColor color = palette().background().color(); QVariant variant = color;
Использование canConvert() и convert() последовательно
При последовательном использовании canConvert() и convert() возможно, что canConvert() вернёт true, а convert() — false. Обычно это происходит потому, что canConvert() сообщает только о способности QVariant преобразовывать между типами при наличии подходящих данных; всё ещё возможно предоставить данные, которые фактически не могут быть преобразованы.
Например, canConvert(Int) вернёт true при вызове на варианте, содержащем строку, потому что QVariant, в принципе, может преобразовать строки чисел в целые числа. Однако, если строка содержит нечисловые символы, она не может быть преобразована в целое число, и любая попытка её преобразования завершится неудачей. Поэтому важно, чтобы обе функции возвращали true для успешного преобразования.
См. также QMetaType.
Документация по функциям-членам
QVariant::QVariant(QVariant &&other)
Перемещающее создание экземпляра QVariant, позволяющее ему указывать на тот же объект, на который указывал other.
Эта функция была добавлена в Qt 5.2.
QVariant::QVariant(const QPersistentModelIndex &val)
Создаёт новый вариант со значением QPersistentModelIndex, val.
Эта функция была добавлена в Qt 5.5.
QVariant::QVariant(const QModelIndex &val)
Создаёт новый вариант со значением QModelIndex, val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QJsonDocument &val)
Создаёт новый вариант со значением JSON-документа, val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QJsonArray &val)
Создаёт новый вариант со значением JSON-массива, val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QJsonObject &val)
Создаёт новый вариант со значением JSON-объекта, val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QJsonValue &val)
Создаёт новый вариант со значением JSON-значения, val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QUuid &val)
Создаёт новый вариант со значением UUID, val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QEasingCurve &val)
Создаёт новый вариант со значением кривой сглаживания, val.
Эта функция была добавлена в Qt 4.7.
QVariant::QVariant(const QUrl &val)
Создаёт новый вариант со значением URL val.
QVariant::QVariant(const QRegularExpression &re)
Создаёт новый вариант со значением регулярного выражения re.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QRegExp ®Exp)
Создаёт новый вариант со значением regexp regExp.
QVariant::QVariant(const QLocale &l)
Создаёт новый вариант со значением локали, l.
QVariant::QVariant(const QRectF &val)
Создаёт новый вариант со значением прямоугольника val.
QVariant::QVariant(const QRect &val)
Создаёт новый вариант со значением прямоугольника val.
QVariant::QVariant(const QLineF &val)
Создаёт новый вариант со значением линии val.
QVariant::QVariant(const QLine &val)
Создаёт новый вариант со значением линии val.
QVariant::QVariant(const QPointF &val)
Создаёт новый вариант со значением точки val.
QVariant::QVariant(const QPoint &val)
Создаёт новый вариант со значением точки val.
QVariant::QVariant(const QSizeF &val)
Создаёт новый вариант со значением размера val.
QVariant::QVariant(const QSize &val)
Создаёт новый вариант со значением размера val.
QVariant::QVariant(const QHash<QString, QVariant> &val)
Создаёт новый вариант со значением хеш-таблицы QVariants, val.
QVariant::QVariant(const QMap<QString, QVariant> &val)
Создаёт новый вариант со значением карты QVariants, val.
QVariant::QVariant(const QList<QVariant> &val)
Создаёт новый вариант со значением списка, val.
QVariant::QVariant(const QDateTime &val)
Создаёт новый вариант со значением даты и времени, val.
QVariant::QVariant(const QTime &val)
Создаёт новый вариант со значением времени, val.
QVariant::QVariant(const QDate &val)
Создаёт новый вариант со значением даты, val.
QVariant::QVariant(QChar c)
Создаёт новый вариант со значением символа, c.
QVariant::QVariant(const QStringList &val)
Создаёт новый вариант со значением списка строк, val.
QVariant::QVariant(QLatin1String val)
Создаёт новый вариант со значением строки, val.
QVariant::QVariant(const QString &val)
Создаёт новый вариант со значением строки, val.
QVariant::QVariant(const QBitArray &val)
Создаёт новый вариант со значением массива битов, val.
QVariant::QVariant(const QByteArray &val)
Создаёт новый вариант со значением массива байтов, val.
QVariant::QVariant(const char *val)
Создаёт новый вариант со значением строки val. Вариант создаёт глубокую копию val в QString, предполагая кодировку UTF-8 для входных данных val.
Обратите внимание, что val преобразуется в QString для хранения в варианте, и QVariant::userType() вернёт QMetaType::QString для варианта.
Вы можете отключить этот оператор, определив QT_NO_CAST_FROM_ASCII при компиляции ваших приложений.
QVariant::QVariant(float val)
Создаёт новый вариант с плавающей точкой значением, val.
Эта функция была добавлена в Qt 4.6.
QVariant::QVariant(double val)
Создаёт новый вариант с плавающей точкой значением, val.
QVariant::QVariant(bool val)
Создаёт новую переменную с булевым значением, val.
QVariant::QVariant(qulonglong val)
Создаёт новую переменную с беззнаковым 64-битным целым значением, val.
QVariant::QVariant(qlonglong val)
Создаёт новую переменную с 64-битным целым значением, val.
QVariant::QVariant(uint val)
Создаёт новую переменную с беззнаковым целым значением, val.
QVariant::QVariant(int val)
Создаёт новую переменную с целым значением, val.
QVariant::QVariant(QDataStream &s)
Считывает переменную из потока данных, s.
QVariant::QVariant(const QVariant &p)
Создаёт копию переменной, p, переданной в качестве аргумента конструктору.
QVariant::QVariant(int typeId, const void *copy)
Создаёт переменную типа typeId и инициализирует её copy, если copy не nullptr.
Обратите внимание, что необходимо передать адрес переменной, которую вы хотите сохранить.
Как правило, вам никогда не придётся использовать этот конструктор, используйте QVariant::fromValue() вместо него для создания переменных из типов указателей, представленных QMetaType::VoidStar, и QMetaType::QObjectStar.
См. также QVariant::fromValue() и QMetaType::Type.
QVariant::QVariant(QVariant::Type type)
Создаёт неинициализированную переменную типа type. Это создаст переменную в особом состоянии null, которая при обращении вернёт значение по умолчанию для типа type.
См. также isNull().
QVariant::QVariant()
Создаёт недопустимую переменную.
QVariant &QVariant::operator=(QVariant &&other)
Перемещает other в эту экземпляр QVariant.
Эта функция была введена в Qt 5.2.
QVariant &QVariant::operator=(const QVariant &variant)
Присваивает значение переменной variant этой переменной.
QVariant::~QVariant()
Уничтожает QVariant и содержащий объект.
Обратите внимание, что подклассы, переопределяющие clear(), должны переопределять деструктор, вызывая clear(). Этот деструктор вызывает clear(), но поскольку это деструктор, QVariant::clear() вызывается, а не clear() подкласса.
bool QVariant::canConvert(int targetTypeId) const
Возвращает true, если тип переменной может быть преобразован к запрошенному типу, targetTypeId. Такое преобразование выполняется автоматически при вызове методов toInt(), toBool() и т. д.
Следующие преобразования выполняются автоматически:
A QVariant containing a pointer to a type derived from QObject will also return true for this function if a qobject_cast to the type described by targetTypeId would succeed. Note that this only works for QObject subclasses which use the Q_OBJECT macro.
A QVariant containing a sequential container will also return true for this function if the targetTypeId is QVariantList. It is possible to iterate over the contents of the container without extracting it as a (copied) QVariantList:
QList<int> intList = {7, 11, 42};
QVariant variant = QVariant::fromValue(intList);
if (variant.canConvert<QVariantList>()) {
QSequentialIterable iterable = variant.value<QSequentialIterable>();
// Can use foreach:
foreach (const QVariant &v, iterable) {
qDebug() << v;
}
// Can use C++11 range-for:
for (const QVariant &v : iterable) {
qDebug() << v;
}
// Can use iterators:
QSequentialIterable::const_iterator it = iterable.begin();
const QSequentialIterable::const_iterator end = iterable.end();
for ( ; it != end; ++it) {
qDebug() << *it;
}
} This requires that the value_type of the container is itself a metatype.
Similarly, a QVariant containing a sequential container will also return true for this function the targetTypeId is QVariantHash or QVariantMap. It is possible to iterate over the contents of the container without extracting it as a (copied) QVariantHash or QVariantMap:
QHash<int, QString> mapping;
mapping.insert(7, "Seven");
mapping.insert(11, "Eleven");
mapping.insert(42, "Forty-two");
QVariant variant = QVariant::fromValue(mapping);
if (variant.canConvert<QVariantHash>()) {
QAssociativeIterable iterable = variant.value<QAssociativeIterable>();
// Can use foreach over the values:
foreach (const QVariant &v, iterable) {
qDebug() << v;
}
// Can use C++11 range-for over the values:
for (const QVariant &v : iterable) {
qDebug() << v;
}
// Can use iterators:
QAssociativeIterable::const_iterator it = iterable.begin();
const QAssociativeIterable::const_iterator end = iterable.end();
for ( ; it != end; ++it) {
qDebug() << *it; // The current value
qDebug() << it.key();
qDebug() << it.value();
}
} See also convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable, and Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().
bool QVariant::canConvert() const
Returns true if the variant can be converted to the template type T, otherwise false.
Example:
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
A QVariant containing a pointer to a type derived from QObject will also return true for this function if a qobject_cast to the template type T would succeed. Note that this only works for QObject subclasses which use the Q_OBJECT macro.
See also convert().
void QVariant::clear()
Convert this variant to type QMetaType::UnknownType and free up any resources used.
bool QVariant::convert(int targetTypeId)
Casts the variant to the requested type, targetTypeId. If the cast cannot be done, the variant is still changed to the requested type, but is left in a cleared null state similar to that constructed by QVariant(Type).
Returns true if the current type of the variant was successfully cast; otherwise returns false.
A QVariant containing a pointer to a type derived from QObject will also convert and return true for this function if a qobject_cast to the type described by targetTypeId would succeed. Note that this only works for QObject subclasses which use the Q_OBJECT macro.
Note: converting QVariants that are null due to not being initialized or having failed a previous conversion will always fail, changing the type, remaining null, and returning false.
See also canConvert(int targetTypeId) and clear().
[static] QVariant QVariant::fromStdVariant(const std::variant<Types...> &value)
Returns a QVariant with the type and value of the active variant of value. If the active type is std::monostate a default QVariant is returned.
Note: With this method you do not need to register the variant as a Qt metatype, since the std::variant is resolved before being stored. The component types should be registered however.
This function was introduced in Qt 5.11.
See also fromValue().
[static] QVariant QVariant::fromValue(const T &value)
Returns a QVariant containing a copy of value. Behaves exactly like setValue() otherwise.
Example:
MyCustomStruct s; return QVariant::fromValue(s);
Note: If you are working with custom types, you should use the Q_DECLARE_METATYPE() macro to register your custom type.
See also setValue() and value().
bool QVariant::isNull() const
Returns true if this is a null variant, false otherwise. A variant is considered null if it contains no initialized value, or the contained value is nullptr or is an instance of a built-in type that has an isNull method, in which case the result would be the same as calling isNull on the wrapped object.
Warning: Null variants is not a single state and two null variants may easily return false on the == operator if they do not contain similar null values.
See also convert(int).
bool QVariant::isValid() const
Returns true if the storage type of this variant is not QMetaType::UnknownType; otherwise returns false.
[static] QVariant::Type QVariant::nameToType(const char *name)
Converts the string representation of the storage type given in name, to its enum representation.
If the string representation cannot be converted to any enum representation, the variant is set to Invalid.
void QVariant::setValue(const T &value)
Stores a copy of value. If T is a type that QVariant doesn't support, QMetaType is used to store the value. A compile error will occur if QMetaType doesn't handle the type.
Example:
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>();
See also value(), fromValue(), and canConvert().
void QVariant::swap(QVariant &other)
Swaps variant other with this variant. This operation is very fast and never fails.
This function was introduced in Qt 4.8.
QBitArray QVariant::toBitArray() const
Returns the variant as a QBitArray if the variant has userType() QMetaType::QBitArray; otherwise returns an empty bit array.
See also canConvert(int targetTypeId) and convert().
bool QVariant::toBool() const
Returns the variant as a bool if the variant has userType() Bool.
Returns true if the variant has userType() QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::UInt, or QMetaType::ULongLong and the value is non-zero, or if the variant has type QMetaType::QString or QMetaType::QByteArray and its lower-case content is not one of the following: empty, "0" or "false"; otherwise returns false.
See also canConvert(int targetTypeId) and convert().
QByteArray QVariant::toByteArray() const
Returns the variant as a QByteArray if the variant has userType() QMetaType::QByteArray or QMetaType::QString (converted using QString::fromUtf8()); otherwise returns an empty byte array.
See also canConvert(int targetTypeId) and convert().
QChar QVariant::toChar() const
Returns the variant as a QChar if the variant has userType() QMetaType::QChar, QMetaType::Int, or QMetaType::UInt; otherwise returns an invalid QChar.
See also canConvert(int targetTypeId) and convert().
QDate QVariant::toDate() const
Returns the variant as a QDate if the variant has userType() QMetaType::QDate, QMetaType::QDateTime, or QMetaType::QString; otherwise returns an invalid date.
If the type() is QMetaType::QString, an invalid date will be returned if the string cannot be parsed as a Qt::ISODate format date.
See also canConvert(int targetTypeId) and convert().
QDateTime QVariant::toDateTime() const
Возвращает значение варианта как QDateTime, если у варианта userType() имеет значение QMetaType::QDateTime, QMetaType::QDate или QMetaType::QString; в противном случае возвращает недействительную дату/время.
Если type() имеет значение QMetaType::QString, возвращается недействительная дата/время, если строка не может быть распознана как дата/время в формате Qt::ISODate.
См. также canConvert(int targetTypeId) и convert().
double QVariant::toDouble(bool *ok = nullptr) const
Возвращает значение варианта как double, если у варианта userType() имеет значение QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.0.
Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в double; в противном случае *ok устанавливается в false.
См. также canConvert(int targetTypeId) и convert().
QEasingCurve QVariant::toEasingCurve() const
Возвращает значение варианта как QEasingCurve, если у варианта userType() имеет значение QMetaType::QEasingCurve; в противном случае возвращает кривую сглаживания по умолчанию.
Эта функция была добавлена в Qt 4.7.
См. также canConvert(int targetTypeId) и convert().
float QVariant::toFloat(bool *ok = nullptr) const
Возвращает значение варианта как float, если у варианта userType() имеет значение QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.0.
Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в double; в противном случае *ok устанавливается в false.
Эта функция была добавлена в Qt 4.6.
См. также canConvert(int targetTypeId) и convert().
QHash<QString, QVariant> QVariant::toHash() const
Возвращает значение варианта как QHash<QString, QVariant>, если у варианта type() имеет значение QMetaType::QVariantHash; в противном случае возвращает пустой словарь.
См. также canConvert(int targetTypeId) и convert().
int QVariant::toInt(bool *ok = nullptr) const
Возвращает значение варианта как int, если у варианта userType() имеет значение QMetaType::Int, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.
Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в int; в противном случае *ok устанавливается в false.
Предупреждение: Если значение может быть преобразовано в QMetaType::LongLong, но слишком велико для представления в int, ошибка арифметического переполнения не отражается в ok. Простым решением является использование QString::toInt().
См. также canConvert(int targetTypeId) и convert().
QJsonArray QVariant::toJsonArray() const
Возвращает значение варианта как QJsonArray, если у варианта userType() имеет значение QJsonArray; в противном случае возвращает QJsonArray по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
QJsonDocument QVariant::toJsonDocument() const
Возвращает значение варианта как QJsonDocument, если у варианта userType() имеет значение QJsonDocument; в противном случае возвращает QJsonDocument по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
QJsonObject QVariant::toJsonObject() const
Возвращает значение варианта как QJsonObject, если у варианта userType() имеет значение QJsonObject; в противном случае возвращает QJsonObject по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
QJsonValue QVariant::toJsonValue() const
Возвращает значение варианта как QJsonValue, если у варианта userType() имеет значение QJsonValue; в противном случае возвращает QJsonValue по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
QLine QVariant::toLine() const
Возвращает значение варианта как QLine, если у варианта userType() имеет значение QMetaType::QLine; в противном случае возвращает недействительную QLine.
См. также canConvert(int targetTypeId) и convert().
QLineF QVariant::toLineF() const
Возвращает значение варианта как QLineF, если у варианта userType() имеет значение QMetaType::QLineF; в противном случае возвращает недействительную QLineF.
См. также canConvert(int targetTypeId) и convert().
QList<QVariant> QVariant::toList() const
Возвращает значение варианта как QVariantList, если у варианта userType() имеет значение QMetaType::QVariantList или QMetaType::QStringList; в противном случае возвращает пустой список.
См. также canConvert(int targetTypeId) и convert().
QLocale QVariant::toLocale() const
Возвращает значение варианта как QLocale, если у варианта userType() имеет значение QMetaType::QLocale; в противном случае возвращает недействительную QLocale.
См. также canConvert(int targetTypeId) и convert().
qlonglong QVariant::toLongLong(bool *ok = nullptr) const
Возвращает значение варианта как целое число типа long long, если у варианта userType() имеет значение QMetaType::LongLong, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.
Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в int; в противном случае *ok устанавливается в false.
См. также canConvert(int targetTypeId) и convert().
QMap<QString, QVariant> QVariant::toMap() const
Возвращает значение варианта как QMap<QString, QVariant>, если у варианта type() имеет значение QMetaType::QVariantMap; в противном случае возвращает пустой словарь.
См. также canConvert(int targetTypeId) и convert().
END_OF_DOCUMENT_MARKERQModelIndex QVariant::toModelIndex() const
Возвращает значение переменной в виде QModelIndex, если тип переменной имеет userType() QModelIndex; в противном случае возвращает QModelIndex по умолчанию.
Эта функция была введена в Qt 5.0.
См. также canConvert(int targetTypeId), convert() и toPersistentModelIndex().
QPersistentModelIndex QVariant::toPersistentModelIndex() const
Возвращает значение переменной в виде QPersistentModelIndex, если тип переменной имеет userType() QPersistentModelIndex; в противном случае возвращает QPersistentModelIndex по умолчанию.
Эта функция была введена в Qt 5.5.
См. также canConvert(int targetTypeId), convert() и toModelIndex().
QPoint QVariant::toPoint() const
Возвращает значение переменной в виде QPoint, если тип переменной имеет userType() QMetaType::QPoint или QMetaType::QPointF; в противном случае возвращает нулевой QPoint.
См. также canConvert(int targetTypeId) и convert().
QPointF QVariant::toPointF() const
Возвращает значение переменной в виде QPointF, если тип переменной имеет userType() QMetaType::QPoint или QMetaType::QPointF; в противном случае возвращает нулевой QPointF.
См. также canConvert(int targetTypeId) и convert().
qreal QVariant::toReal(bool *ok = nullptr) const
Возвращает значение переменной в виде qreal, если тип переменной имеет userType() QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.0.
Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в double; в противном случае *ok устанавливается в false.
Эта функция была введена в Qt 4.6.
См. также canConvert(int targetTypeId) и convert().
QRect QVariant::toRect() const
Возвращает значение переменной в виде QRect, если тип переменной имеет userType() QMetaType::QRect; в противном случае возвращает невалидный QRect.
См. также canConvert(int targetTypeId) и convert().
QRectF QVariant::toRectF() const
Возвращает значение переменной в виде QRectF, если тип переменной имеет userType() QMetaType::QRect или QMetaType::QRectF; в противном случае возвращает невалидный QRectF.
См. также canConvert(int targetTypeId) и convert().
QRegExp QVariant::toRegExp() const
Возвращает значение переменной в виде QRegExp, если тип переменной имеет userType() QMetaType::QRegExp; в противном случае возвращает пустой QRegExp.
Эта функция была введена в Qt 4.1.
См. также canConvert(int targetTypeId) и convert().
QRegularExpression QVariant::toRegularExpression() const
Возвращает значение переменной в виде QRegularExpression, если тип переменной имеет userType() QRegularExpression; в противном случае возвращает пустой QRegularExpression.
Эта функция была введена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
QSize QVariant::toSize() const
Возвращает значение переменной в виде QSize, если тип переменной имеет userType() QMetaType::QSize; в противном случае возвращает невалидный QSize.
См. также canConvert(int targetTypeId) и convert().
QSizeF QVariant::toSizeF() const
Возвращает значение переменной в виде QSizeF, если тип переменной имеет userType() QMetaType::QSizeF; в противном случае возвращает невалидный QSizeF.
См. также canConvert(int targetTypeId) и convert().
QString QVariant::toString() const
Возвращает значение переменной в виде QString, если тип переменной включает в себя, но не ограничивается, следующими типами:
QMetaType::QString, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::QDate, QMetaType::QDateTime, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QStringList, QMetaType::QTime, QMetaType::UInt или QMetaType::ULongLong.
Вызов QVariant::toString() для неподдерживаемой переменной возвращает пустую строку.
См. также canConvert(int targetTypeId) и convert().
QStringList QVariant::toStringList() const
Возвращает значение переменной в виде QStringList, если тип переменной имеет userType() QMetaType::QStringList, QMetaType::QString или QMetaType::QVariantList типа, который может быть преобразован в QString; в противном случае возвращает пустой список.
См. также canConvert(int targetTypeId) и convert().
QTime QVariant::toTime() const
Возвращает значение переменной в виде QTime, если тип переменной имеет userType() QMetaType::QTime, QMetaType::QDateTime или QMetaType::QString; в противном случае возвращает невалидное время.
Если тип type() равен QMetaType::QString, возвращается невалидное время, если строка не может быть обработана как время в формате Qt::ISODate.
См. также canConvert(int targetTypeId) и convert().
uint QVariant::toUInt(bool *ok = nullptr) const
Возвращает значение переменной как unsigned int, если тип переменной имеет userType() QMetaType::UInt, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString или QMetaType::ULongLong; в противном случае возвращает 0.
Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в unsigned int; в противном случае *ok устанавливается в false.
Предупреждение: Если значение может быть преобразовано в QMetaType::ULongLong, но слишком велико для представления в unsigned int, результат арифметического переполнения не отобразится в ok. Простым решением является использование QString::toUInt().
См. также canConvert(int targetTypeId) и convert().
qulonglong QVariant::toULongLong(bool *ok = nullptr) const
Возвращает значение переменной как unsigned long long int, если тип переменной имеет type() QMetaType::ULongLong, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString или QMetaType::UInt; в противном случае возвращает 0.
Если ok не null: *ok устанавливается в true, если значение можно преобразовать в int; в противном случае *ok устанавливается в false.
См. также canConvert(int targetTypeId) и convert().
QUrl QVariant::toUrl() const
Возвращает значение варианта как QUrl, если у варианта userType() равен QMetaType::QUrl; в противном случае возвращает недействительный QUrl.
См. также canConvert(int targetTypeId) и convert().
QUuid QVariant::toUuid() const
Возвращает значение варианта как QUuid, если у варианта type() равен QMetaType::QUuid, QMetaType::QByteArray или QMetaType::QString; в противном случае возвращает QUuid по умолчанию.
Эта функция была введена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
QVariant::Type QVariant::type() const
Возвращает тип хранилища значения, хранящегося в варианте. Хотя эта функция объявлена как возвращающая QVariant::Type, возвращаемое значение должно интерпретироваться как QMetaType::Type. В частности, QVariant::UserType возвращается здесь только если значение равно или больше QMetaType::User.
Обратите внимание, что возвращаемые значения в диапазонах от QVariant::Char до QVariant::RegExp и от QVariant::Font до QVariant::Transform соответствуют значениям в диапазонах от QMetaType::QChar до QMetaType::QRegExp и от QMetaType::QFont до QMetaType::QQuaternion.
Обратите особое внимание при работе с вариантами типа char и QChar. Обратите внимание, что нет конструктора QVariant специально для типа char, но есть конструктор для QChar. Для варианта типа QChar эта функция возвращает QVariant::Char, что эквивалентно QMetaType::QChar, но для варианта типа char, эта функция возвращает QMetaType::Char, что не является тем же, что QVariant::Char.
Также обратите внимание, что типы void*, long, short, unsigned long, unsigned short, unsigned char, float, QObject*, и QWidget* представлены в QMetaType::Type, но не в QVariant::Type, и могут быть возвращены этой функцией. Однако они считаются пользовательскими типами при проверке на QVariant::Type.
Чтобы проверить, содержит ли экземпляр QVariant тип данных, совместимый с интересующим вас типом данных, используйте canConvert().
const char *QVariant::typeName() const
Возвращает имя типа, хранящегося в варианте. Возвращаемые строки описывают тип данных C++, используемый для хранения данных: например, "QFont", "QString" или "QVariantList". Недействительный вариант возвращает 0.
[static] const char *QVariant::typeToName(int typeId)
Преобразует целочисленное представление типа хранения typeId в его строковое представление.
Возвращает nullptr если тип является QMetaType::UnknownType или не существует.
int QVariant::userType() const
Возвращает тип хранения значения, хранящегося в варианте. Для типов, не являющихся пользовательскими, это то же самое, что и type().
См. также type().
T QVariant::value() const
Возвращает сохранённое значение, преобразованное к шаблону типа T. Вызовите canConvert(), чтобы узнать, может ли тип быть преобразован. Если значение не может быть преобразовано, будет возвращено значение по умолчанию.
Если тип T поддерживается QVariant, эта функция ведет себя точно так же, как toString(), toInt() и т. д.
Пример:
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 Если QVariant содержит указатель на тип, производный от QObject, то T может быть любого типа QObject. Если указатель, хранящийся в QVariant, может быть qobject_cast к T, то возвращается это значение. В противном случае возвращается nullptr. Обратите внимание, что это работает только для подклассов QObject, использующих макрос Q_OBJECT.
Если QVariant содержит последовательный контейнер и T является QVariantList, элементы контейнера будут преобразованы в QVariant и возвращены как QVariantList.
QList<int> intList = {7, 11, 42};
QVariant variant = QVariant::fromValue(intList);
if (variant.canConvert<QVariantList>()) {
QSequentialIterable iterable = variant.value<QSequentialIterable>();
// Can use foreach:
foreach (const QVariant &v, iterable) {
qDebug() << v;
}
// Can use C++11 range-for:
for (const QVariant &v : iterable) {
qDebug() << v;
}
// Can use iterators:
QSequentialIterable::const_iterator it = iterable.begin();
const QSequentialIterable::const_iterator end = iterable.end();
for ( ; it != end; ++it) {
qDebug() << *it;
}
} См. также setValue(), fromValue(), canConvert() и Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().
bool QVariant::operator!=(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true если они не равны; в противном случае возвращает false.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator<(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true если этот меньше v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator<=(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true если этот меньше или равен v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator==(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true если они равны; в противном случае возвращает false.
QVariant использует оператор равенства типа type(), содержащегося в нём, для проверки равенства. QVariant будет пытаться преобразовать v, если его тип не совпадает с типом этого варианта. См. canConvert() для списка возможных преобразований.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator>(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true если этот больше v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator>=(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true если этот больше или равен v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
Связанные нечлены
typedef QVariant::QVariantHash
Синоним для QHash<QString, QVariant>.
Этот typedef был введён в Qt 4.5.
typedef QVariant::QVariantList
typedef QVariant::QVariantMap
Синоним для QMap<QString, QVariant>.
T QVariant::qvariant_cast(const QVariant &value)
Возвращает заданное значение value, преобразованное к шаблону типа T.
Эта функция эквивалентна QVariant::value().
См. также QVariant::value().
bool QVariant::operator!=(const QVariant &v1, const QVariant &v2)
Возвращает false если v1 и v2 равны; в противном случае возвращает true.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения для него должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator==(const QVariant &v1, const QVariant &v2)
Возвращает true если v1 и v2 равны; в противном случае возвращает false.
Если v1 и v2 имеют тот же тип (type()), для сравнения используется оператор равенства этого типа. Если нет, то пытается convert() v2 в тот же тип, что и v1. Список возможных преобразований см. в canConvert().
Результат функции не зависит от результата QVariant::isNull, что означает, что два значения могут быть равны, даже если одно из них null, а другое — нет.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения для него должен быть зарегистрирован с помощью QMetaType::registerComparators().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qvariant.html