Класс 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. Для получения подробностей см. документацию QMetaType.
Замечание по типам графического интерфейса
Поскольку 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)
Создаёт новый вариант со значением целого числа типа 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)
Создаёт новый вариант со списком, 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 значение true, если тип вариации может быть преобразован к запрошенному типу targetTypeId. Такое преобразование выполняется автоматически при вызове методов toInt(), toBool() и т.д.
Следующие преобразования выполняются автоматически:
QVariant, содержащая указатель на тип, производный от QObject, также вернёт true для этой функции, если qobject_cast к типу, описанному targetTypeId, будет успешным. Обратите внимание, что это работает только для подклассов QObject, использующих макрос Q_OBJECT.
QVariant, содержащая последовательный контейнер, также вернёт true для этой функции, если targetTypeId является QVariantList. Возможна итерация по содержимому контейнера без извлечения его как (скопированного) QVariantList:
QList<int> intList;
intList.push_back(7);
intList.push_back(11);
intList.push_back(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
Возвращает значение варианта как число с плавающей точкой, если у варианта есть 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::QPointF или 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::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;
intList.push_back(7);
intList.push_back(11);
intList.push_back(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/archives/qt-5.6/qvariant.html