Класс 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 хранит одно значение одного типа() за раз. (Некоторые типы() являются многозначными, например, список строк.) Вы можете узнать, какой тип 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.
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)
Конструирует новый вариант с длинным целочисленным значением 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. Это создаст вариант в специальном нулевом состоянии, который при доступе вернет значение по умолчанию, сконструированное из 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(), ...
Следующие преобразования выполняются автоматически:
QVariant, содержащий указатель на тип, производный от QObject, также вернет true для этой функции, если qobject_cast к типу, описанному targetTypeId, будет успешным. Обратите внимание, что это работает только для подклассов QObject, которые используют макрос Q_OBJECT.
QVariant, содержащий последовательный контейнер, также вернет true для этой функции, если targetTypeId является QVariantList. Можно перебирать содержимое контейнера, не извлекая его как (скопированный) 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;
}
} Это требует, чтобы тип значения контейнера сам был метатипом.
Аналогично, QVariant, содержащий последовательный контейнер, также вернёт true для этой функции, если targetTypeId равен QVariantHash или QVariantMap. Возможно итерировать по содержимому контейнера, не извлекая его как (скопированный) QVariantHash или 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();
}
} См. также convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable и Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().
bool QVariant::canConvert() const
Возвращает true если вариант может быть преобразован в шаблонный тип T, в противном случае — false.
Пример:
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
QVariant, содержащий указатель на тип, производный от QObject, также вернёт true для этой функции, если qobject_cast к шаблонному типу T будет успешным. Обратите внимание, что это работает только для подклассов QObject, которые используют макрос Q_OBJECT.
См. также convert().
void QVariant::clear()
Преобразует этот вариант в тип QMetaType::UnknownType и освобождает все используемые ресурсы.
bool QVariant::convert(int targetTypeId)
Преобразует вариант к запрошенному типу targetTypeId. Если преобразование невозможно, вариант всё равно изменяется на запрошенный тип, но остаётся в очищенном нулевом состоянии, аналогичном состоянию, созданному QVariant(Type).
Возвращает true если текущий тип варианта был успешно преобразован; в противном случае возвращает false.
QVariant, содержащий указатель на тип, производный от QObject, также выполнит преобразование и вернёт true для этой функции, если qobject_cast к типу, описанному targetTypeId, будет успешным. Обратите внимание, что это работает только для подклассов QObject, которые используют макрос Q_OBJECT.
Примечание: преобразование QVariant, которые являются нулевыми из-за того, что они не были инициализированы или не прошли предыдущее преобразование, всегда завершится неудачей, изменит тип, останется нулевым и вернёт false.
См. также canConvert(int targetTypeId) и clear().
[static] QVariant QVariant::fromStdVariant(const std::variant<Types...> &value)
Возвращает QVariant с типом и значением активного варианта value. Если активный тип — std::monostate, возвращается стандартный QVariant.
Примечание: с этим методом вам не нужно регистрировать вариант как метатип Qt, так как std::variant разрешается до хранения. Однако типы компонентов должны быть зарегистрированы.
Эта функция была добавлена в Qt 5.11.
См. также fromValue().
[static] QVariant QVariant::fromValue(const T &value)
Возвращает QVariant, содержащую копию value. Ведёт себя точно так же, как setValue() в остальных случаях.
Пример:
MyCustomStruct s; return QVariant::fromValue(s);
Примечание: если вы работаете с пользовательскими типами, вам следует использовать макрос Q_DECLARE_METATYPE() для регистрации вашего пользовательского типа.
См. также setValue() и value().
bool QVariant::isNull() const
Возвращает true если это нулевой вариант, в противном случае — false. Вариант считается нулевым, если он не содержит инициализированного значения или содержащее значение является nullptr или является экземпляром встроенного типа, имеющего метод isNull, в этом случае результат будет таким же, как при вызове isNull на обернутом объекте.
Предупреждение: нулевые варианты не представляют собой единое состояние, и два нулевых варианта могут легко вернуть false для оператора ==, если они не содержат аналогичных нулевых значений.
См. также convert(int).
bool QVariant::isValid() const
Возвращает true если тип хранения этого варианта не QMetaType::UnknownType; в противном случае возвращает false.
[static] QVariant::Type QVariant::nameToType(const char *name)
Преобразует строковое представление типа хранения, заданного в name, в его представление перечисления.
Если строковое представление не может быть преобразовано в какое-либо представление перечисления, вариант устанавливается в Invalid.
void QVariant::setValue(const T &value)
Хранит копию value. Если T — тип, который QVariant не поддерживает, используется QMetaType для хранения значения. Ошибка компиляции произойдёт, если QMetaType не обрабатывает тип.
Пример:
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>();
См. также value(), fromValue() и canConvert().
void QVariant::swap(QVariant &other)
Меняет местами вариант other с этим вариантом. Эта операция очень быстрая и никогда не завершается ошибкой.
Эта функция была добавлена в Qt 4.8.
QBitArray QVariant::toBitArray() const
Возвращает вариант как QBitArray, если у варианта есть userType() QMetaType::QBitArray; в противном случае возвращает пустой массив битов.
См. также canConvert(int targetTypeId) и convert().
bool QVariant::toBool() const
Возвращает вариант как bool, если у варианта есть userType() Bool.
Возвращает true если у варианта есть userType() QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::UInt или QMetaType::ULongLong и значение не равно нулю, или если у варианта есть тип QMetaType::QString или QMetaType::QByteArray, и его содержимое в нижнем регистре не является одним из следующих: пустое, "0" или "false"; в противном случае возвращает false.
См. также canConvert(int targetTypeId) и convert().
QByteArray QVariant::toByteArray() const
Возвращает вариант как QByteArray, если у варианта есть userType() QMetaType::QByteArray или QMetaType::QString (преобразованное с помощью QString::fromUtf8()); в противном случае возвращает пустой массив байтов.
См. также canConvert(int targetTypeId) и convert().
QChar QVariant::toChar() const
Возвращает вариант как QChar, если у варианта есть userType() QMetaType::QChar, QMetaType::Int или QMetaType::UInt; в противном случае возвращает недействительный QChar.
См. также canConvert(int targetTypeId) и convert().
QDate QVariant::toDate() const
Возвращает вариант как QDate, если у варианта есть userType() QMetaType::QDate, QMetaType::QDateTime или QMetaType::QString; в противном случае возвращает недействительную дату.
Если type() является QMetaType::QString, недействительная дата будет возвращена, если строка не может быть проанализирована как дата в формате Qt::ISODate.
См. также canConvert(int targetTypeId) и convert().
QDateTime QVariant::toDateTime() const
Возвращает вариант как QDateTime, если у варианта есть userType() QMetaType::QDateTime, QMetaType::QDate или QMetaType::QString; в противном случае возвращает недействительную дату/время.
Если type() является QMetaType::QString, недействительное время будет возвращено, если строка не может быть проанализирована как дата/время в формате Qt::ISODate.
См. также canConvert(int targetTypeId) и convert().
END_OF_DOCUMENT_MARKERdouble 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; в противном случае возвращает пустой map.
См. также 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 int, если у варианта 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; в противном случае возвращает пустой map.
См. также canConvert(int targetTypeId) и convert().
QModelIndex QVariant::toModelIndex() const
Возвращает значение варианта как QModelIndex, если у варианта userType() равно QModelIndex; в противном случае возвращает QModelIndex по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId), convert() и toPersistentModelIndex().
END_OF_DOCUMENT_MARKERQPersistentModelIndex QVariant::toPersistentModelIndex() const
Возвращает значение варианта как QPersistentModelIndex, если тип варианта — QPersistentModelIndex; в противном случае возвращает QPersistentModelIndex по умолчанию.
Эта функция была добавлена в Qt 5.5.
См. также canConvert(int targetTypeId), convert() и toModelIndex().
QPoint QVariant::toPoint() const
Возвращает значение варианта как QPoint, если тип варианта — QMetaType::QPoint или QMetaType::QPointF; в противном случае возвращает нулевой QPoint.
См. также canConvert(int targetTypeId) и convert().
QPointF QVariant::toPointF() const
Возвращает значение варианта как QPointF, если тип варианта — QMetaType::QPoint или QMetaType::QPointF; в противном случае возвращает нулевой QPointF.
См. также canConvert(int targetTypeId) и convert().
qreal QVariant::toReal(bool *ok = nullptr) const
Возвращает значение варианта как qreal, если тип варианта — 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, если тип варианта — QMetaType::QRect; в противном случае возвращает недействительный QRect.
См. также canConvert(int targetTypeId) и convert().
QRectF QVariant::toRectF() const
Возвращает значение варианта как QRectF, если тип варианта — QMetaType::QRect или QMetaType::QRectF; в противном случае возвращает недействительный QRectF.
См. также canConvert(int targetTypeId) и convert().
QRegExp QVariant::toRegExp() const
Возвращает значение варианта как QRegExp, если тип варианта — QMetaType::QRegExp; в противном случае возвращает пустой QRegExp.
Эта функция была добавлена в Qt 4.1.
См. также canConvert(int targetTypeId) и convert().
QRegularExpression QVariant::toRegularExpression() const
Возвращает значение варианта как QRegularExpression, если тип варианта — QRegularExpression; в противном случае возвращает пустой QRegularExpression.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
QSize QVariant::toSize() const
Возвращает значение варианта как QSize, если тип варианта — QMetaType::QSize; в противном случае возвращает недействительный QSize.
См. также canConvert(int targetTypeId) и convert().
QSizeF QVariant::toSizeF() const
Возвращает значение варианта как QSizeF, если тип варианта — 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, если тип варианта — QMetaType::QStringList, QMetaType::QString или QMetaType::QVariantList типа, преобразуемого в QString; в противном случае возвращает пустой список.
См. также canConvert(int targetTypeId) и convert().
QTime QVariant::toTime() const
Возвращает значение варианта как QTime, если тип варианта — QMetaType::QTime, QMetaType::QDateTime или QMetaType::QString; в противном случае возвращает недействительное время.
Если тип type() — QMetaType::QString, возвращается недействительное время, если строка не может быть обработана как время в формате Qt::ISODate.
См. также canConvert(int targetTypeId) и convert().
uint QVariant::toUInt(bool *ok = nullptr) const
Возвращает значение варианта как целое без знака, если тип варианта — QMetaType::UInt, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString или QMetaType::ULongLong; в противном случае возвращает 0.
Если ok не равно null: *ok устанавливается в true, если значение может быть преобразовано в беззнаковое целое; в противном случае *ok устанавливается в false.
Предупреждение: Если значение может быть преобразовано в QMetaType::ULongLong, но слишком велико для представления в беззнаковом целом, то переполнение не отражается в ok. Простым решением является использование QString::toUInt().
См. также canConvert(int targetTypeId) и convert().
qulonglong QVariant::toULongLong(bool *ok = nullptr) const
Возвращает значение варианта как целое без знака 64-разрядной точности, если тип варианта — QMetaType::ULongLong, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString или QMetaType::UInt; в противном случае возвращает 0.
Если ok не равно null: *ok устанавливается в true, если значение может быть преобразовано в целое; в противном случае *ok устанавливается в false.
См. также canConvert(int targetTypeId) и convert().
QUrl QVariant::toUrl() const
Возвращает значение варианта как QUrl, если тип варианта — 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().
END_OF_DOCUMENT_MARKERСвязанные нечлены
typedef QVariantHash
Синоним для QHash<QString, QVariant>.
Этот typedef был введён в Qt 4.5.
typedef QVariantList
typedef QVariantMap
Синоним для QMap<QString, QVariant>.
T qvariant_cast(const QVariant &value)
Возвращает заданное значение value, преобразованное в шаблонный тип T.
Эта функция эквивалентна QVariant::value().
См. также QVariant::value().
bool operator!=(const QVariant &v1, const QVariant &v2)
Возвращает false если v1 и v2 равны; в противном случае возвращает true.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), её оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool operator==(const QVariant &v1, const QVariant &v2)
Возвращает true если v1 и v2 равны; в противном случае возвращает false.
Если v1 и v2 имеют тот же тип(), используется оператор равенства этого типа для сравнения. Если нет, то происходит попытка преобразовать() v2 к тому же типу, что и v1. Список возможных преобразований см. в canConvert().
Результат функции не зависит от результата QVariant::isNull, что означает, что два значения могут быть равными, даже если одно из них пустое, а другое — нет.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), её оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qvariant.html