Класс QVariant
Класс QVariant работает как объединение для наиболее распространённых типов данных Qt. Подробнее...
| Заголовок: | #include <QVariant> |
| qmake: | QT += core |
Публичные типы
| класс | Обработчик |
| класс | Приватный |
| класс | Приватный общий |
Публичные функции
| QVariant() | |
| QVariant(QVariant::Type type) | |
| QVariant(const QRegularExpression &re) | |
| QVariant(const QUrl &val) | |
| QVariant(const QEasingCurve &val) | |
| QVariant(const QUuid &val) | |
| QVariant(const QJsonValue &val) | |
| QVariant(const QJsonObject &val) | |
| QVariant(const QJsonArray &val) | |
| QVariant(const QJsonDocument &val) | |
| QVariant(const QModelIndex &val) | |
| QVariant(const QPersistentModelIndex &val) | |
| QVariant(QVariant &&other) | |
| QVariant(int typeId, const void *copy) | |
| QVariant(const QVariant &p) | |
| QVariant(QDataStream &s) | |
| QVariant(int val) | |
| QVariant(uint val) | |
| QVariant(qlonglong val) | |
| QVariant(qulonglong val) | |
| QVariant(bool val) | |
| QVariant(double val) | |
| QVariant(float val) | |
| QVariant(const char *val) | |
| QVariant(const QByteArray &val) | |
| QVariant(const QBitArray &val) | |
| QVariant(const QString &val) | |
| QVariant(QLatin1String val) | |
| QVariant(const QStringList &val) | |
| QVariant(QChar c) | |
| QVariant(const QDate &val) | |
| QVariant(const QTime &val) | |
| QVariant(const QDateTime &val) | |
| QVariant(const QList<QVariant> &val) | |
| QVariant(const QMap<QString, QVariant> &val) | |
| QVariant(const QHash<QString, QVariant> &val) | |
| QVariant(const QSize &val) | |
| QVariant(const QSizeF &val) | |
| QVariant(const QPoint &val) | |
| QVariant(const QPointF &val) | |
| QVariant(const QLine &val) | |
| QVariant(const QLineF &val) | |
| QVariant(const QRect &val) | |
| QVariant(const QRectF &val) | |
| QVariant(const QLocale &l) | |
| QVariant(const QRegExp ®Exp) | |
| ~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 |
| QVariant & | operator=(const QVariant &variant) |
| QVariant & | operator=(QVariant &&other) |
| bool | operator==(const QVariant &v) const |
| bool | operator>(const QVariant &v) const |
| bool | operator>=(const QVariant &v) const |
Статические публичные члены
| QVariant | fromStdVariant(const int &value) |
| QVariant | fromValue(const T &value) |
| QVariant::Type | nameToType(const char *name) |
| const char * | typeToName(int typeId) |
Защищенные переменные
| QVariant::Private | d |
Связанные нечлены
| 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) |
Подробное описание
Класс QVariant работает как объединение для наиболее распространенных типов данных Qt.
Поскольку 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::QVariant(QVariant::Type type)
Создаёт неинициализированный вариант типа type. Это создаст вариант в специальном нулевом состоянии, который при обращении вернёт значение по умолчанию для типа type.
См. также isNull().
QVariant::QVariant(const QRegularExpression &re)
Создаёт новый вариант со значением регулярного выражения re.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QUrl &val)
Создаёт новый вариант со значением URL val.
QVariant::QVariant(const QEasingCurve &val)
Создаёт новый вариант со значением кривой сглаживания val.
Эта функция была добавлена в Qt 4.7.
QVariant::QVariant(const QUuid &val)
Создаёт новый вариант со значением UUID val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QJsonValue &val)
Создаёт новый вариант со значением JSON val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QJsonObject &val)
Создаёт новый вариант со значением JSON-объекта val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QJsonArray &val)
Создаёт новый вариант со значением JSON-массива val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QJsonDocument &val)
Создаёт новый вариант со значением JSON-документа val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QModelIndex &val)
Создаёт новый вариант со значением QModelIndex val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QPersistentModelIndex &val)
Создаёт новый вариант со значением QPersistentModelIndex val.
Эта функция была добавлена в Qt 5.5.
QVariant::QVariant(QVariant &&other)
Создаёт QVariant экземпляр путём перемещения, устанавливая указатель на тот же объект, на который указывал other.
Эта функция была добавлена в Qt 5.2.
QVariant::QVariant(int typeId, const void *copy)
Создаёт вариант типа typeId и инициализирует его с помощью copy, если copy не равен 0.
Обратите внимание, что вам необходимо передать адрес переменной, которую вы хотите сохранить.
Как правило, вам никогда не придётся использовать этот конструктор, используйте QVariant::fromValue() вместо него, чтобы создавать варианты из указателей на типы, представленные QMetaType::VoidStar, и QMetaType::QObjectStar.
См. также QVariant::fromValue() и QMetaType::Type.
QVariant::QVariant(const QVariant &p)
Создаёт копию варианта p, переданного в качестве аргумента этому конструктору.
QVariant::QVariant(QDataStream &s)
Считывает вариант из потока данных s.
QVariant::QVariant(int val)
Создаёт новый вариант со значением целого числа val.
QVariant::QVariant(uint val)
Создаёт новый вариант со значением целого беззнакового числа val.
QVariant::QVariant(qlonglong val)
Создаёт новый вариант со значением целого числа типа long long val.
QVariant::QVariant(qulonglong val)
Создаёт новый вариант со значением целого беззнакового числа типа long long val.
QVariant::QVariant(bool val)
Создаёт новый вариант с логическим значением val.
QVariant::QVariant(double val)
Создаёт новый вариант с плавающей точкой значением val.
QVariant::QVariant(float val)
Создаёт новый вариант с плавающей точкой значением val.
Эта функция была добавлена в Qt 4.6.
QVariant::QVariant(const char *val)
Создаёт новый вариант со строковым значением val. Вариант создаёт глубокую копию val в QString, предполагая кодировку UTF-8 входного val.
Обратите внимание, что val преобразуется в QString для хранения в варианте, и QVariant::userType() вернёт QMetaType::QString для варианта.
Вы можете отключить этот оператор, определив QT_NO_CAST_FROM_ASCII при компиляции ваших приложений.
QVariant::QVariant(const QByteArray &val)
Создаёт новый вариант со значением байтового массива val.
QVariant::QVariant(const QBitArray &val)
Создаёт новый вариант со значением битового массива val.
QVariant::QVariant(const QString &val)
Создаёт новый вариант со строковым значением val.
QVariant::QVariant(QLatin1String val)
Создаёт новый вариант со строковым значением val.
QVariant::QVariant(const QStringList &val)
Создаёт новый вариант со списком строк val.
QVariant::QVariant(QChar c)
Создаёт новый вариант с символом c.
QVariant::QVariant(const QDate &val)
Создаёт новый вариант с датой val.
QVariant::QVariant(const QTime &val)
Создаёт новый вариант со временем val.
QVariant::QVariant(const QDateTime &val)
Создаёт новый вариант с датой и временем val.
QVariant::QVariant(const QList<QVariant> &val)
Создаёт новую переменную типа QVariant со списком значений, val.
QVariant::QVariant(const QMap<QString, QVariant> &val)
Создаёт новую переменную типа QVariant со словарем QVariant значений, val.
QVariant::QVariant(const QHash<QString, QVariant> &val)
Создаёт новую переменную типа QVariant с хешем QVariant значений, val.
QVariant::QVariant(const QSize &val)
Создаёт новую переменную типа QVariant с размером val.
QVariant::QVariant(const QSizeF &val)
Создаёт новую переменную типа QVariant с размером val.
QVariant::QVariant(const QPoint &val)
Создаёт новую переменную типа QVariant с точкой val.
QVariant::QVariant(const QPointF &val)
Создаёт новую переменную типа QVariant с точкой val.
QVariant::QVariant(const QLine &val)
Создаёт новую переменную типа QVariant с линией val.
QVariant::QVariant(const QLineF &val)
Создаёт новую переменную типа QVariant с линией val.
QVariant::QVariant(const QRect &val)
Создаёт новую переменную типа QVariant с прямоугольником val.
QVariant::QVariant(const QRectF &val)
Создаёт новую переменную типа QVariant с прямоугольником val.
QVariant::QVariant(const QLocale &l)
Создаёт новую переменную типа QVariant с локалью l.
QVariant::QVariant(const QRegExp ®Exp)
Создаёт новую переменную типа QVariant с регулярным выражением regExp.
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;
}
} Для этого требуется, чтобы value_type контейнера сам был метатипом.
END_OF_DOCUMENT_MARKERАналогично, 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.
Примечание: преобразование QVariants, которые равны null из-за отсутствия инициализации или неудачного предыдущего преобразования, всегда завершается неудачей, меняет тип, остаётся равным null и возвращает false.
См. также canConvert(int targetTypeId) и clear().
[static] QVariant QVariant::fromStdVariant(const int &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. Переменная считается нулевой, если она не содержит инициализированного значения, или содержащее значение является нулевым указателем, или является экземпляром встроенного типа, имеющего метод 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().
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 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; в противном случае возвращает пустой словарь.
См. также canConvert(int targetTypeId) и convert().
QModelIndex 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, если у варианта есть userType(), включая, но не ограничиваясь:
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
Возвращает вариант в виде беззнакового целого числа, если у варианта есть userType() 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-разрядного целого числа, если у варианта есть type() 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, если у варианта есть userType() QMetaType::QUrl; в противном случае возвращает недопустимый QUrl.
См. также canConvert(int targetTypeId) и convert().
END_OF_DOCUMENT_MARKERQUuid 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 в его строковое представление.
Возвращает null-указатель, если тип является 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, можно привести к типу T с помощью qobject_cast, то возвращается это значение. В противном случае возвращается null-указатель. Обратите внимание, что это работает только для подклассов 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 , если этот QVariant меньше v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator<=(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true , если этот QVariant меньше или равен v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
QVariant &QVariant::operator=(const QVariant &variant)
Присваивает значение варианта variant этому варианту.
QVariant &QVariant::operator=(QVariant &&other)
Перемещающее присваивание other этому экземпляру QVariant.
Эта функция была добавлена в Qt 5.2.
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 , если этот QVariant больше v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator>=(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true , если этот QVariant больше или равен v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
Связанные нечлены
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 имеют одинаковый тип type(), для сравнения используется оператор равенства этого типа. В противном случае пытается преобразовать 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.12/qvariant.html