Класс QVariant
Класс QVariant выполняет роль объединения для наиболее распространённых типов данных Qt. Подробнее...
| Заголовок: | #include <QVariant> |
| qmake: | QT += core |
Открытые функции
| QVariant() | |
| QVariant(Type type) | |
| QVariant(const QRegularExpression &re) | |
| QVariant(const QUrl &val) | |
| QVariant(const QEasingCurve &val) | |
| QVariant(const QUuid &val) | |
| QVariant(const QModelIndex &val) | |
| QVariant(const QPersistentModelIndex &val) | |
| QVariant(const QJsonValue &val) | |
| QVariant(const QJsonObject &val) | |
| QVariant(const QJsonArray &val) | |
| QVariant(const QJsonDocument &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 = Q_NULLPTR) const |
| QEasingCurve | toEasingCurve() const |
| float | toFloat(bool *ok = Q_NULLPTR) const |
| QHash<QString, QVariant> | toHash() const |
| int | toInt(bool *ok = Q_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 = Q_NULLPTR) const |
| QMap<QString, QVariant> | toMap() const |
| QModelIndex | toModelIndex() const |
| QPersistentModelIndex | toPersistentModelIndex() const |
| QPoint | toPoint() const |
| QPointF | toPointF() const |
| qreal | toReal(bool *ok = Q_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 = Q_NULLPTR) const |
| qulonglong | toULongLong(bool *ok = Q_NULLPTR) const |
| QUrl | toUrl() const |
| QUuid | toUuid() const |
| 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 | fromValue(const T &value) |
| 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) |
Подробное описание
Класс QVariant действует как объединение для самых распространенных типов данных Qt.
Поскольку 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.
END_OF_DOCUMENT_MARKERЗамечание по типам пользовательского интерфейса
Поскольку QVariant является частью модуля Qt Core, он не может предоставить функции преобразования в типы данных, определённые в Qt GUI, такие как QColor, QImage и QPixmap. Другими словами, нет функции toColor(). Вместо этого вы можете использовать функцию шаблона QVariant::value() или qvariant_cast(). Например:
QVariant variant; ... QColor color = variant.value<QColor>();
Обратное преобразование (например, от QColor к QVariant) выполняется автоматически для всех типов данных, поддерживаемых QVariant, включая типы, связанные с пользовательским интерфейсом:
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(Type type)
Создаёт нулевой вариант типа type.
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 QModelIndex &val)
Создаёт новый вариант со значением QModelIndex val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QPersistentModelIndex &val)
Создаёт новый вариант со значением QPersistentModelIndex val.
Эта функция была добавлена в Qt 5.5.
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(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)
Создаёт новый вариант со значением целого 64-битного числа val.
QVariant::QVariant(qulonglong val)
Создаёт новый вариант со значением беззнакового 64-битного целого числа 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)
Создаёт новый вариант со списком val.
QVariant::QVariant(const QMap<QString, QVariant> &val)
Создаёт новый вариант со словарём QVariant val.
QVariant::QVariant(const QHash<QString, QVariant> &val)
Создаёт новую вариацию с хэш-таблицей QVariant значений, val.
QVariant::QVariant(const QSize &val)
Создаёт новую вариацию со значением размера val.
QVariant::QVariant(const QSizeF &val)
Создаёт новую вариацию со значением размера val.
QVariant::QVariant(const QPoint &val)
Создаёт новую вариацию со значением точки val.
QVariant::QVariant(const QPointF &val)
Создаёт новую вариацию со значением точки val.
QVariant::QVariant(const QLine &val)
Создаёт новую вариацию со значением линии val.
QVariant::QVariant(const QLineF &val)
Создаёт новую вариацию со значением линии val.
QVariant::QVariant(const QRect &val)
Создаёт новую вариацию со значением прямоугольника val.
QVariant::QVariant(const QRectF &val)
Создаёт новую вариацию со значением прямоугольника val.
QVariant::QVariant(const QLocale &l)
Создаёт новую переменную с значением локали l.
QVariant::QVariant(const QRegExp ®Exp)
Создаёт новую переменную со значением регулярного выражения 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 контейнера сам был метатипом.
Аналогично, 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. Если преобразование невозможно, переменная очищается. Возвращает true если текущий тип переменной был успешно преобразован; в противном случае возвращает false.
QVariant, содержащий указатель на тип, производный от QObject, также выполнит преобразование и вернёт true для этой функции, если преобразование qobject_cast к типу, описанному параметром targetTypeId, было бы успешным. Обратите внимание, что это работает только для подклассов QObject, использующих макрос Q_OBJECT.
Предупреждение: По историческим причинам преобразование пустой QVariant приводит к пустому значению нужного типа (например, пустая строка для QString) и результату false.
См. также canConvert() и clear().
[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 на обернутом объекте.
Предупреждение: Результат функции не влияет на оператор ==, что означает, что два значения могут быть равны, даже если одно из них пустое, а другое — нет.
bool QVariant::isValid() const
Возвращает true, если тип хранения этой переменной не QMetaType::UnknownType; в противном случае возвращает false.
[static] 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() и 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() и convert().
QByteArray QVariant::toByteArray() const
Возвращает переменную как QByteArray, если у переменной userType() равно QMetaType::QByteArray или QMetaType::QString (преобразовано с помощью QString::fromUtf8()); в противном случае возвращает пустой массив байтов.
См. также canConvert() и convert().
QChar QVariant::toChar() const
Возвращает переменную как QChar, если у переменной userType() равно QMetaType::QChar, QMetaType::Int или QMetaType::UInt; в противном случае возвращает недопустимый QChar.
См. также canConvert() и convert().
QDate QVariant::toDate() const
Возвращает переменную как QDate, если у переменной userType() равно QMetaType::QDate, QMetaType::QDateTime или QMetaType::QString; в противном случае возвращает недопустимую дату.
Если type() равно QMetaType::QString, возвращается недопустимая дата, если строка не может быть обработана как дата в формате Qt::ISODate.
См. также canConvert() и convert().
QDateTime QVariant::toDateTime() const
Возвращает переменную как QDateTime, если у переменной userType() равно QMetaType::QDateTime, QMetaType::QDate или QMetaType::QString; в противном случае возвращает недопустимую дату/время.
Если type() равно QMetaType::QString, возвращается недопустимая дата/время, если строка не может быть обработана как дата/время в формате Qt::ISODate.
См. также canConvert() и convert().
double QVariant::toDouble(bool *ok = Q_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() и convert().
QEasingCurve QVariant::toEasingCurve() const
Возвращает переменную как QEasingCurve, если у переменной userType() равно QMetaType::QEasingCurve; в противном случае возвращает кривую изменения по умолчанию.
Эта функция была добавлена в Qt 4.7.
См. также canConvert() и convert().
float QVariant::toFloat(bool *ok = Q_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() и convert().
QHash<QString, QVariant> QVariant::toHash() const
Возвращает значение варианта как QHash<QString, QVariant>, если у варианта есть type() QMetaType::QVariantHash; в противном случае возвращает пустой массив.
См. также canConvert() и convert().
int QVariant::toInt(bool *ok = Q_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() и convert().
QJsonArray QVariant::toJsonArray() const
Возвращает значение варианта как QJsonArray, если у варианта есть userType() QJsonArray; в противном случае возвращает QJsonArray по умолчанию.
Данная функция была введена в Qt 5.0.
См. также canConvert() и convert().
QJsonDocument QVariant::toJsonDocument() const
Возвращает значение варианта как QJsonDocument, если у варианта есть userType() QJsonDocument; в противном случае возвращает QJsonDocument по умолчанию.
Данная функция была введена в Qt 5.0.
См. также canConvert() и convert().
QJsonObject QVariant::toJsonObject() const
Возвращает значение варианта как QJsonObject, если у варианта есть userType() QJsonObject; в противном случае возвращает QJsonObject по умолчанию.
Данная функция была введена в Qt 5.0.
См. также canConvert() и convert().
QJsonValue QVariant::toJsonValue() const
Возвращает значение варианта как QJsonValue, если у варианта есть userType() QJsonValue; в противном случае возвращает QJsonValue по умолчанию.
Данная функция была введена в Qt 5.0.
См. также canConvert() и convert().
QLine QVariant::toLine() const
Возвращает значение варианта как QLine, если у варианта есть userType() QMetaType::QLine; в противном случае возвращает недопустимую QLine.
См. также canConvert() и convert().
QLineF QVariant::toLineF() const
Возвращает значение варианта как QLineF, если у варианта есть userType() QMetaType::QLineF; в противном случае возвращает недопустимую QLineF.
См. также canConvert() и convert().
QList<QVariant> QVariant::toList() const
Возвращает значение варианта как QVariantList, если у варианта есть userType() QMetaType::QVariantList или QMetaType::QStringList; в противном случае возвращает пустой список.
См. также canConvert() и convert().
QLocale QVariant::toLocale() const
Возвращает значение варианта как QLocale, если у варианта есть userType() QMetaType::QLocale; в противном случае возвращает недопустимый QLocale.
См. также canConvert() и convert().
qlonglong QVariant::toLongLong(bool *ok = Q_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() и convert().
QMap<QString, QVariant> QVariant::toMap() const
Возвращает значение варианта как QMap<QString, QVariant>, если у варианта есть type() QMetaType::QVariantMap; в противном случае возвращает пустой массив.
См. также canConvert() и convert().
QModelIndex QVariant::toModelIndex() const
Возвращает значение варианта как QModelIndex, если у варианта есть userType() QModelIndex; в противном случае возвращает QModelIndex по умолчанию.
Данная функция была введена в Qt 5.0.
См. также canConvert(), convert() и toPersistentModelIndex().
QPersistentModelIndex QVariant::toPersistentModelIndex() const
Возвращает значение варианта как QPersistentModelIndex, если у варианта есть userType() QPersistentModelIndex; в противном случае возвращает QPersistentModelIndex по умолчанию.
Данная функция была введена в Qt 5.5.
См. также canConvert(), convert() и toModelIndex().
QPoint QVariant::toPoint() const
Возвращает значение варианта как QPoint, если у варианта есть userType() QMetaType::QPoint или QMetaType::QPointF; в противном случае возвращает нулевую QPoint.
См. также canConvert() и convert().
QPointF QVariant::toPointF() const
Возвращает значение варианта как QPointF, если у варианта есть userType() QMetaType::QPoint или QMetaType::QPointF; в противном случае возвращает нулевую QPointF.
См. также canConvert() и convert().
qreal QVariant::toReal(bool *ok = Q_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() и convert().
QRect QVariant::toRect() const
Возвращает значение варианта как QRect, если у варианта userType() равен QMetaType::QRect; в противном случае возвращает невалидную QRect.
См. также canConvert() и convert().
QRectF QVariant::toRectF() const
Возвращает значение варианта как QRectF, если у варианта userType() равен QMetaType::QRect или QMetaType::QRectF; в противном случае возвращает невалидную QRectF.
См. также canConvert() и convert().
QRegExp QVariant::toRegExp() const
Возвращает значение варианта как QRegExp, если у варианта userType() равен QMetaType::QRegExp; в противном случае возвращает пустой QRegExp.
Эта функция была добавлена в Qt 4.1.
См. также canConvert() и convert().
QRegularExpression QVariant::toRegularExpression() const
Возвращает значение варианта как QRegularExpression, если у варианта userType() равен QRegularExpression; в противном случае возвращает пустой QRegularExpression.
Эта функция была добавлена в Qt 5.0.
См. также canConvert() и convert().
QSize QVariant::toSize() const
Возвращает значение варианта как QSize, если у варианта userType() равен QMetaType::QSize; в противном случае возвращает невалидную QSize.
См. также canConvert() и convert().
QSizeF QVariant::toSizeF() const
Возвращает значение варианта как QSizeF, если у варианта userType() равен QMetaType::QSizeF; в противном случае возвращает невалидную QSizeF.
См. также canConvert() и 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; в противном случае возвращает пустую строку.
См. также canConvert() и convert().
QStringList QVariant::toStringList() const
Возвращает значение варианта как QStringList, если у варианта userType() равен QMetaType::QStringList, QMetaType::QString или QMetaType::QVariantList типа, который можно преобразовать в QString; в противном случае возвращает пустой список.
См. также canConvert() и convert().
QTime QVariant::toTime() const
Возвращает значение варианта как QTime, если у варианта userType() равен QMetaType::QTime, QMetaType::QDateTime или QMetaType::QString; в противном случае возвращает невалидное время.
Если тип type() равен QMetaType::QString, возвращается невалидное время, если строка не может быть обработана как время в формате Qt::ISODate.
См. также canConvert() и convert().
uint QVariant::toUInt(bool *ok = Q_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() и convert().
qulonglong QVariant::toULongLong(bool *ok = Q_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() и convert().
QUrl QVariant::toUrl() const
Возвращает значение варианта как QUrl, если у варианта userType() равен QMetaType::QUrl; в противном случае возвращает невалидный QUrl.
См. также canConvert() и convert().
QUuid QVariant::toUuid() const
Возвращает значение варианта как QUuid, если у варианта type() равен QMetaType::QUuid, QMetaType::QByteArray или QMetaType::QString; в противном случае возвращает QUuid по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert() и convert().
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". Для варианта со значением Invalid возвращается 0.
[static] const char *QVariant::typeToName(int typeId)
Преобразует целочисленное представление типа хранения, typeId, в его строковое представление.
Возвращает нулевой указатель, если тип является 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, то возвращается результат. В противном случае возвращается нулевой указатель. Обратите внимание, что это работает только для подклассов 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().
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 если этот больше, чем v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), его оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
bool QVariant::operator>=(const QVariant &v) const
Сравнивает этот QVariant с v и возвращает true если этот больше или равен v.
Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.
Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), его оператор сравнения должен быть зарегистрирован с помощью QMetaType::registerComparators().
Связанные нечлены
typedef QVariantHash
Синоним для QHash<QString, QVariant>.
Этот псевдоним типа был добавлен в 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(), для сравнения используется оператор равенства этого типа. Если нет, пытается 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.9/qvariant.html