Класс QVariant
Класс QVariant ведет себя как объединение для наиболее распространенных типов данных Qt. Подробнее...
| Заголовок: | #include <QVariant> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Публичные функции
| QVariant(QVariant &&other) | |
| QVariant(const QPersistentModelIndex &val) | |
| QVariant(const QModelIndex &val) | |
| QVariant(const QJsonDocument &val) | |
| QVariant(const QJsonArray &val) | |
| QVariant(const QJsonObject &val) | |
| QVariant(const QJsonValue &val) | |
| QVariant(const QUrl &val) | |
| QVariant(const QUuid &val) | |
| QVariant(const QEasingCurve &val) | |
| QVariant(const QRegularExpression &re) | |
| QVariant(const QLocale &l) | |
| QVariant(const QRectF &val) | |
| QVariant(const QRect &val) | |
| QVariant(const QLineF &val) | |
| QVariant(const QLine &val) | |
| QVariant(const QPointF &val) | |
| QVariant(const QPoint &val) | |
| QVariant(const QSizeF &val) | |
| QVariant(const QSize &val) | |
|
QVariant(const QHash |
|
|
QVariant(const QMap |
|
|
QVariant(const QList |
|
| QVariant(const QDateTime &val) | |
| QVariant(QTime val) | |
| QVariant(QDate val) | |
| QVariant(QChar c) | |
| QVariant(const QStringList &val) | |
| QVariant(QLatin1String val) | |
| QVariant(const QString &val) | |
| QVariant(const QBitArray &val) | |
| QVariant(const QByteArray &val) | |
| QVariant(const char *val) | |
| QVariant(float val) | |
| QVariant(double val) | |
| QVariant(bool val) | |
| QVariant(qulonglong val) | |
| QVariant(qlonglong val) | |
| QVariant(uint val) | |
| QVariant(int val) | |
| QVariant(const QVariant &p) | |
| QVariant(QMetaType type, const void *copy = nullptr) | |
| QVariant() | |
| QVariant & | operator=(QVariant &&other) |
| QVariant & | operator=(const QVariant &variant) |
| ~QVariant() | |
| bool | canConvert(QMetaType type) const |
| bool | canConvert() const |
| bool | canView() const |
| void | clear() |
| const void * | constData() const |
| bool | convert(QMetaType targetType) |
| void * | data() |
| const void * | data() const |
| bool | isNull() const |
| bool | isValid() const |
| QMetaType | metaType() const |
| void | setValue(T &&value) |
| void | setValue(const QVariant &value) |
| void | setValue(QVariant &&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 |
| 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 |
| int | typeId() const |
| const char * | typeName() const |
| int | userType() const |
| T | value() const |
| T | view() |
Статические публичные члены
| QPartialOrdering | compare(const QVariant &lhs, const QVariant &rhs) |
| QVariant | fromStdVariant(const std::variant<Types...> &value) |
| QVariant | fromValue(const T &value) |
Связанные нечлены
| QVariantHash | |
| QVariantList | |
| QVariantMap | |
| T | qvariant_cast(const QVariant &value) |
| bool | operator!=(const QVariant &v1, const QVariant &v2) |
| bool | operator==(const QVariant &v1, const QVariant &v2) |
Подробное описание
Поскольку C++ запрещает объединения, включающие типы с конструкторами или деструкторами по умолчанию, большинство интересных классов Qt не могут использоваться в объединениях. Без QVariant это была бы проблема для QObject::property() и для работы с базами данных и т. д.
Объект QVariant хранит одно значение одного типа() одновременно. (Некоторые типы() являются многозначными, например, список строк.) Вы можете узнать, какой тип, T, хранит переменная, преобразовать его в другой тип с помощью convert(), получить его значение с помощью одной из функций toT() (например, toSize()) и проверить, можно ли преобразовать тип в конкретный тип с помощью canConvert().
Методы с именем toT() (например, toInt(), toString()) являются константными. Если вы запрашиваете хранимый тип, они возвращают копию хранимого объекта. Если вы запрашиваете тип, который может быть сгенерирован из хранимого типа, toT() копирует и преобразует и оставляет сам объект неизменным. Если вы запрашиваете тип, который не может быть сгенерирован из хранимого типа, результат зависит от типа; см. документацию функции для получения подробной информации.
Вот пример кода, демонстрирующий использование QVariant:
QDataStream out(...);
QVariant v(123); // The variant now contains an int
int x = v.toInt(); // x = 123
out << v; // Writes a type tag and an int to out
v = QVariant("hello"); // The variant now contains a QByteArray
v = QVariant(tr("hello")); // The variant now contains a QString
int y = v.toInt(); // y = 0 since v cannot be converted to an int
QString s = v.toString(); // s = tr("hello") (see QObject::tr())
out << v; // Writes a type tag and a QString to out
...
QDataStream in(...); // (opening the previously written stream)
in >> v; // Reads an Int variant
int z = v.toInt(); // z = 123
qDebug("Type is %s", // prints "Type is int"
v.typeName());
v = v.toInt() + 100; // The variant now hold the value 223
v = QVariant(QStringList()); Вы даже можете хранить QList<QVariant> и QMap<QString, QVariant> значения в переменной, поэтому вы можете легко создать произвольно сложные структуры данных произвольных типов. Это очень мощно и универсально, но может оказаться менее эффективным в плане памяти и скорости, чем хранение конкретных типов в стандартных структурах данных.
QVariant также поддерживает понятие нулевых значений, где у вас может быть определенный тип без установленного значения. Однако обратите внимание, что типы QVariant могут быть преобразованы только при наличии установленного значения.
QVariant x, y(QString()), z(QString(""));
x.convert(QMetaType::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.
Документация функций-членов
const void *QVariant::constData() const
const void *QVariant::data() const
Возвращает указатель на содержащийся объект в виде универсального void*, к которому нельзя обращаться для записи.
См. также QMetaType.
int QVariant::typeId() const
int QVariant::userType() const
Возвращает тип хранения значения, хранящегося в варианте. Это то же самое, что metaType().id().
См. также type() и metaType().
[since 5.2] QVariant::QVariant(QVariant &&other)
Инициализирует экземпляр QVariant, используя перемещение, делая его указывающим на тот же объект, на который указывал other.
Эта функция была добавлена в Qt 5.2.
[since 5.5] QVariant::QVariant(const QPersistentModelIndex &val)
Создаёт новый вариант со значением QPersistentModelIndex, val.
Эта функция была добавлена в Qt 5.5.
[since 5.0] QVariant::QVariant(const QModelIndex &val)
Создаёт новый вариант со значением QModelIndex, val.
Эта функция была добавлена в Qt 5.0.
[since 5.0] QVariant::QVariant(const QJsonDocument &val)
Создаёт новый вариант со значением JSON-документа, val.
Эта функция была добавлена в Qt 5.0.
[since 5.0] QVariant::QVariant(const QJsonArray &val)
Создаёт новый вариант со значением JSON-массива, val.
Эта функция была добавлена в Qt 5.0.
[since 5.0] QVariant::QVariant(const QJsonObject &val)
Создаёт новый вариант со значением JSON-объекта, val.
Эта функция была добавлена в Qt 5.0.
[since 5.0] QVariant::QVariant(const QJsonValue &val)
Создаёт новый вариант со значением JSON-значения, val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QUrl &val)
Создаёт новый вариант со значением URL, val.
[since 5.0] QVariant::QVariant(const QUuid &val)
Создаёт новый вариант со значением UUID, val.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QEasingCurve &val)
Создаёт новый вариант со значением кривой сглаживания, val.
[since 5.0] QVariant::QVariant(const QRegularExpression &re)
Создаёт новый вариант со значением регулярного выражения re.
Эта функция была добавлена в Qt 5.0.
QVariant::QVariant(const QLocale &l)
Создаёт новый вариант со значением локали, l.
QVariant::QVariant(const QRectF &val)
Создаёт новый вариант со значением прямоугольника, val.
QVariant::QVariant(const QRect &val)
Создаёт новый вариант со значением прямоугольника, val.
QVariant::QVariant(const QLineF &val)
Создаёт новый вариант со значением линии, val.
QVariant::QVariant(const QLine &val)
Создаёт новый вариант со значением линии, val.
QVariant::QVariant(const QPointF &val)
Создаёт новый вариант со значением точки, val.
QVariant::QVariant(const QPoint &val)
Создаёт новый вариант со значением точки, val.
QVariant::QVariant(const QSizeF &val)
Создаёт новый вариант со значением размера, val.
QVariant::QVariant(const QSize &val)
Создаёт новый вариант со значением размера, val.
QVariant::QVariant(const QHash<QString, QVariant> &val)
Создаёт новый вариант со значением хэша QVariantов, val.
QVariant::QVariant(const QMap<QString, QVariant> &val)
Создаёт новый вариант со значением карты QVariantов, val.
QVariant::QVariant(const QList<QVariant> &val)
Создаёт новый вариант со значением списка, val.
QVariant::QVariant(const QDateTime &val)
Создаёт новый вариант со значением даты/времени, val.
QVariant::QVariant(QTime val)
Создаёт новый вариант со значением времени, val.
QVariant::QVariant(QDate val)
Создаёт новый вариант со значением даты, val.
QVariant::QVariant(QChar c)
Создаёт новый вариант с символом, c.
QVariant::QVariant(const QStringList &val)
Создаёт новый вариант со значением списка строк, val.
QVariant::QVariant(QLatin1String val)
Создаёт новый вариант со строковым значением, val.
QVariant::QVariant(const QString &val)
Создаёт новый вариант со строковым значением, val.
QVariant::QVariant(const QBitArray &val)
Создаёт новый вариант со значением массива битов, val.
QVariant::QVariant(const QByteArray &val)
Создаёт новый вариант со значением массива байтов, val.
QVariant::QVariant(const char *val)
Создаёт новый вариант со строковым значением val. Вариант создаёт глубокую копию val в QString, предполагая кодировку UTF-8 для входного значения val.
Обратите внимание, что val преобразуется в QString для хранения в варианте, и QVariant::userType() вернёт QMetaType::QString для варианта.
Вы можете отключить этот оператор, определив QT_NO_CAST_FROM_ASCII при компиляции своих приложений.
QVariant::QVariant(float val)
Создаёт новый вариант с плавающей точкой, val.
QVariant::QVariant(double val)
Создаёт новый вариант с плавающей точкой, val.
QVariant::QVariant(bool val)
Создаёт новый вариант с логическим значением, val.
END_OF_DOCUMENT_MARKERQVariant::QVariant(qulonglong val)
Создаёт новый вариант со значением беззнакового 64-битного целого числа, val.
QVariant::QVariant(qlonglong val)
Создаёт новый вариант со значением 64-битного целого числа, val.
QVariant::QVariant(uint val)
Создаёт новый вариант со значением беззнакового целого числа, val.
QVariant::QVariant(int val)
Создаёт новый вариант со значением целого числа, val.
QVariant::QVariant(const QVariant &p)
Создаёт копию варианта, p, переданного в качестве аргумента этому конструктору.
QVariant::QVariant(QMetaType type, const void *copy = nullptr)
Создаёт вариант типа type и инициализирует его значением copy, если copy не nullptr.
Обратите внимание, что вы должны передать адрес переменной, которую вы хотите сохранить.
Обычно, вам никогда не придётся использовать этот конструктор, используйте QVariant::fromValue() вместо него для создания вариантов из типов указателей, представленных QMetaType::VoidStar, и QMetaType::QObjectStar.
См. также QVariant::fromValue() и QMetaType::Type.
QVariant::QVariant()
Создаёт недействительный вариант.
[since 5.2] QVariant &QVariant::operator=(QVariant &&other)
Перемещающее присваивание other текущему экземпляру QVariant.
Эта функция была добавлена в Qt 5.2.
QVariant &QVariant::operator=(const QVariant &variant)
Присваивает значение варианта variant текущему варианту.
QVariant::~QVariant()
Уничтожает QVariant и содержащийся объект.
Обратите внимание, что подклассы, которые переопределяют clear(), должны переопределять деструктор для вызова clear(). Этот деструктор вызывает clear(), но поскольку это деструктор, вызывается QVariant::clear(), а не переопределённый clear() подкласса.
[since 6.0] bool QVariant::canConvert(QMetaType type) const
Возвращает true, если тип варианта может быть преобразован к запрошенному типу, type. Такое преобразование выполняется автоматически при вызове методов toInt(), toBool() и т.д.
Эта функция была добавлена в Qt 6.0.
См. также QMetaType::canConvert().
template <typename T> 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().
template <typename T> bool QVariant::canView() const
Возвращает true , если можно создать изменяемый вид шаблона типа T для этого варианта, в противном случае false.
См. также value().
void QVariant::clear()
Преобразует этот вариант в тип QMetaType::UnknownType и освобождает любые используемые ресурсы.
[static, since 6.0] QPartialOrdering QVariant::compare(const QVariant &lhs, const QVariant &rhs)
Сравнивает объекты в lhs и rhs для упорядочения.
Возвращает QPartialOrdering::Unordered, если сравнение не поддерживается или значения неупорядочены. В противном случае возвращает QPartialOrdering::Less, QPartialOrdering::Equivalent или QPartialOrdering::Greater, если lhs меньше, эквивалентно или больше rhs соответственно.
Если варианты содержат данные с различным метатипом, значения считаются неупорядоченными, если они не оба числовых или указателей, где будут использоваться обычные правила сравнения чисел или указателей.
Примечание: Если выполняется числовое сравнение и хотя бы одно значение равно NaN, возвращается QPartialOrdering::Unordered.
Если оба варианта содержат данные одного метатипа, метод будет использовать метод QMetaType::compare для определения упорядочения двух вариантов, что также может указывать на то, что он не может установить порядок между двумя значениями.
Эта функция была добавлена в Qt 6.0.
См. также QMetaType::compare() и QMetaType::isOrdered().
[since 6.0] bool QVariant::convert(QMetaType targetType)
Преобразует вариант к запрошенному типу, targetType. Если преобразование невозможно, вариант всё ещё изменяется на запрошенный тип, но остаётся в очищенном нулевом состоянии, подобно тому, что создано QVariant(Type).
Возвращает true если текущий тип варианта успешно преобразован; в противном случае возвращает false.
QVariant, содержащий указатель на тип, производный от QObject, также преобразует и вернёт true для этой функции, если qobject_cast к типу, описанному targetType, будет успешным. Обратите внимание, что это работает только для подклассов QObject, использующих макрос Q_OBJECT.
Примечание: преобразование QVariant, которые нулевые из-за того, что не были инициализированы или не прошли предыдущее преобразование, всегда завершится неудачно, изменив тип, оставаясь нулевыми и вернув false.
Эта функция была добавлена в Qt 6.0.
См. также canConvert(int targetTypeId) и clear().
void *QVariant::data()
Возвращает указатель на содержащийся объект в виде универсального void*, который можно записать.
Эта функция отделяет QVariant. При вызове на нулевом QVariant, QVariant не будет нулевым после вызова.
См. также QMetaType.
[static, since 5.11] template <typename Types> QVariant QVariant::fromStdVariant(const std::variant<Types...> &value)
Возвращает QVariant с типом и значением активного варианта value. Если активный тип — std::monostate, возвращается стандартный QVariant.
Примечание: С этим методом вам не нужно регистрировать variant как Qt метатип, так как std::variant разрешается перед сохранением. Однако компоненты должны быть зарегистрированы.
Эта функция была добавлена в Qt 5.11.
См. также fromValue().
[static] template <typename T> 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.
Вариант считается нулевым, если он не содержит инициализированного значения или нулевого указателя.
Примечание: Это поведение изменено с Qt 5, где isNull() также возвращало true, если вариант содержал объект встроенного типа с методом isNull(), который возвращал true для этого объекта.
См. также convert(int).
bool QVariant::isValid() const
Возвращает true , если тип хранилища этого варианта не QMetaType::UnknownType; в противном случае возвращает false.
[since 6.0] QMetaType QVariant::metaType() const
Возвращает QMetaType сохранённого в варианте значения.
Эта функция была добавлена в Qt 6.0.
template <typename T, typename> void QVariant::setValue(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::setValue(const QVariant &value)
Копирует value в этот QVariant. Эквивалентно простому присваиванию value этому QVariant.
void QVariant::setValue(QVariant &&value)
Перемещает value в этот QVariant. Эквивалентно простому перемещающему присваиванию value этому QVariant.
void QVariant::swap(QVariant &other)
Меняет местами значение параметра other с этим значением. Эта операция очень быстрая и никогда не завершается ошибкой.
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; в противном случае возвращает недопустимую дату.
Если тип() — QMetaType::QString, будет возвращена недопустимая дата, если строку нельзя разобрать как дату в формате Qt::ISODate.
См. также canConvert(int targetTypeId) и convert().
QDateTime QVariant::toDateTime() const
Возвращает значение переменной как QDateTime, если у переменной userType() — QMetaType::QDateTime, QMetaType::QDate или QMetaType::QString; в противном случае возвращает недопустимую дату/время.
Если тип() — 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; в противном случае возвращает кривую ускорения по умолчанию.
См. также 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.
См. также canConvert(int targetTypeId) и convert().
QHash<QString, QVariant> QVariant::toHash() const
Возвращает значение переменной как QHash<QString, QVariant>, если у переменной тип() — 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().
[since 5.0] QJsonArray QVariant::toJsonArray() const
Возвращает значение переменной как QJsonArray, если у переменной userType() — QJsonArray; в противном случае возвращает QJsonArray по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
[since 5.0] QJsonDocument QVariant::toJsonDocument() const
Возвращает вариант как QJsonDocument, если у варианта userType() возвращает QJsonDocument; в противном случае возвращает QJsonDocument по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
[since 5.0] QJsonObject QVariant::toJsonObject() const
Возвращает вариант как QJsonObject, если у варианта userType() возвращает QJsonObject; в противном случае возвращает QJsonObject по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
[since 5.0] QJsonValue QVariant::toJsonValue() const
Возвращает вариант как QJsonValue, если у варианта userType() возвращает QJsonValue; в противном случае возвращает QJsonValue по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
QLine QVariant::toLine() const
Возвращает вариант как QLine, если у варианта userType() возвращает QMetaType::QLine; в противном случае возвращает недействительную QLine.
См. также canConvert(int targetTypeId) и convert().
QLineF QVariant::toLineF() const
Возвращает вариант как QLineF, если у варианта userType() возвращает QMetaType::QLineF; в противном случае возвращает недействительную QLineF.
См. также canConvert(int targetTypeId) и convert().
QList<QVariant> QVariant::toList() const
Возвращает вариант как QVariantList, если у варианта userType() возвращает QMetaType::QVariantList или QMetaType::QStringList; в противном случае возвращает пустой список.
См. также canConvert(int targetTypeId) и convert().
QLocale QVariant::toLocale() const
Возвращает вариант как QLocale, если у варианта userType() возвращает QMetaType::QLocale; в противном случае возвращает недействительный QLocale.
См. также canConvert(int targetTypeId) и convert().
qlonglong QVariant::toLongLong(bool *ok = nullptr) const
Возвращает вариант как целое число типа long long, если у варианта userType() возвращает QMetaType::LongLong, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.
Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в int; в противном случае *ok устанавливается в false.
См. также canConvert(int targetTypeId) и convert().
QMap<QString, QVariant> QVariant::toMap() const
Возвращает вариант как QMap<QString, QVariant>, если у варианта тип() равен QMetaType::QVariantMap; в противном случае возвращает пустой массив.
См. также canConvert(int targetTypeId) и convert().
[since 5.0] QModelIndex QVariant::toModelIndex() const
Возвращает вариант как QModelIndex, если у варианта userType() возвращает QModelIndex; в противном случае возвращает QModelIndex по умолчанию.
Эта функция была добавлена в Qt 5.0.
См. также canConvert(int targetTypeId), convert() и toPersistentModelIndex().
[since 5.5] 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.
См. также 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().
[since 5.0] 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; в противном случае возвращает недействительное время.
Если тип() равен 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-битное, если вариативное значение имеет тип() 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().
[since 5.0] QUuid QVariant::toUuid() const
Возвращает вариативное значение как QUuid, если вариативное значение имеет тип() QMetaType::QUuid, QMetaType::QByteArray или QMetaType::QString; в противном случае возвращает QUuid по умолчанию.
Эта функция была введена в Qt 5.0.
См. также canConvert(int targetTypeId) и convert().
const char *QVariant::typeName() const
Возвращает имя типа, хранящегося в вариативном значении. Возвращаемые строки описывают тип данных C++, используемый для хранения данных: например, "QFont", "QString" или "QVariantList". Недействительное вариативное значение возвращает 0.
template <typename T> 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, то возвращается результат. В противном случае возвращается nullptr. Обратите внимание, что это работает только для подклассов QObject, которые используют макрос Q_OBJECT.
Если QVariant содержит последовательную контейнер и T является QVariantList, элементы контейнера будут преобразованы в QVariant и возвращены как QVariantList.
QList<int> intList = {7, 11, 42};
QVariant variant = QVariant::fromValue(intList);
if (variant.canConvert<QVariantList>()) {
QSequentialIterable iterable = variant.value<QSequentialIterable>();
// Can use foreach:
foreach (const QVariant &v, iterable) {
qDebug() << v;
}
// Can use C++11 range-for:
for (const QVariant &v : iterable) {
qDebug() << v;
}
// Can use iterators:
QSequentialIterable::const_iterator it = iterable.begin();
const QSequentialIterable::const_iterator end = iterable.end();
for ( ; it != end; ++it) {
qDebug() << *it;
}
} См. также setValue(), fromValue(), canConvert(), и Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().
template <typename T> T QVariant::view()
Возвращает изменяемый вид шаблона типа T на хранящееся значение. Вызовите canView(), чтобы узнать, поддерживается ли такой вид. Если такой вид не может быть создан, возвращает хранящееся значение, преобразованное к типу шаблона T. Вызовите canConvert(), чтобы узнать, можно ли преобразовать тип. Если значение ни нельзя отобразить, ни преобразовать, возвращается значение по умолчанию.
См. также canView() и Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().
Связанные нечлены
[alias] QVariantHash
Синоним для QHash<QString, QVariant>.
[alias] QVariantList
[alias] QVariantMap
Синоним для QMap<QString, QVariant>.
template <typename T> T qvariant_cast(const QVariant &value)
Возвращает заданное значение value, преобразованное к типу шаблона T.
Эта функция эквивалентна QVariant::value().
См. такжеQVariant::value().
bool operator!=(const QVariant &v1, const QVariant &v2)
Возвращает false, если v1 и v2 равны; в противном случае возвращает true.
QVariant использует оператор равенства содержащего типа() для проверки равенства.
Переменные разных типов всегда будут сравниваться как неравные, за исключением нескольких случаев:
- Если оба типа являются числовыми типами (целые числа и числа с плавающей точкой), Qt будет сравнивать эти типы, используя стандартные правила повышения типа C++.
- Если один тип является числовым, а другой — QString, Qt попытается преобразовать QString в соответствующий числовой тип, и если это удастся, сравнит их.
- Если оба варианта содержат указатели на типы, производные от QObject, QVariant проверит, связаны ли типы и указывают ли они на один и тот же объект.
bool operator==(const QVariant &v1, const QVariant &v2)
Возвращает true, если v1 и v2 равны; в противном случае возвращает false.
QVariant использует оператор равенства содержащего типа() для проверки равенства.
Переменные разных типов всегда будут сравниваться как неравные, за исключением нескольких случаев:
- Если оба типа являются числовыми типами (целые числа и числа с плавающей точкой), Qt будет сравнивать эти типы, используя стандартные правила повышения типа C++.
- Если один тип является числовым, а другой — QString, Qt попытается преобразовать QString в соответствующий числовой тип, и если это удастся, сравнит их.
- Если оба варианта содержат указатели на типы, производные от QObject, QVariant проверит, связаны ли типы и указывают ли они на один и тот же объект.
Результат функции не зависит от результата QVariant::isNull, что означает, что два значения могут быть равны, даже если одно из них пустое, а другое — нет.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qvariant.html