Spec-Zone.ru › Qt 6.1

Класс 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 &val)
QVariant(const QMap &val)
QVariant(const QList &val)
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
END_OF_DOCUMENT_MARKER
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)

Создаёт новый вариант с хэш-таблицей QVariants, val.

QVariant::QVariant(const QMap<QString, QVariant> &val)

Создаёт новый вариант с картой QVariants, val.

QVariant::QVariant(const QList<QVariant> &val)

Создаёт новый вариант со значением списка, val.

QVariant::QVariant(const QDateTime &val)

Создаёт новый вариант со значением даты/времени, val.

QVariant::QVariant(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.

QVariant::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, которые являются null из-за отсутствия инициализации или неудачного предыдущего преобразования, всегда завершится ошибкой, изменит тип, останется null и вернет false.

Эта функция была добавлена в Qt 6.0.

См. также canConvert(int targetTypeId) и clear().

void *QVariant::data()

Возвращает указатель на сохраненный объект как универсальный указатель void*, который можно записать.

Эта функция отсоединяет QVariant. При вызове для null-QVariant, QVariant не будет null после вызова.

См. также QMetaType.

[static, since 5.11] template <typename Types> QVariant QVariant::fromStdVariant(const std::variant<Types...> &value)

Возвращает QVariant с типом и значением активного варианта value. Если активный тип std::monostate, возвращается стандартный QVariant.

Примечание: С этим методом вам не нужно регистрировать вариант как метатип 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.

Вариант считается нулевым, если он не содержит инициализированного значения или указатель на null.

Примечание: Это поведение отличается от 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().

END_OF_DOCUMENT_MARKER

[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, если значение может быть преобразовано в целое число; в противном случае *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, если тип варианта включает в себя, но не ограничивается:

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

Возвращает значение варианта как целое без знака типа long long, если тип варианта имеет 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, может быть преобразован с помощью qobject_cast к T, то возвращается результат. В противном случае возвращается nullptr. Обратите внимание, что это работает только для подклассов QObject, использующих макрос Q_OBJECT.

Если QVariant содержит последовательный контейнер и T является QVariantList, элементы контейнера будут преобразованы в QVariant и возвращены как QVariantList.

QList<int> intList = {7, 11, 42};

QVariant variant = QVariant::fromValue(intList);
if (variant.canConvert<QVariantList>()) {
    QSequentialIterable iterable = variant.value<QSequentialIterable>();
    // Can use foreach:
    foreach (const QVariant &v, iterable) {
        qDebug() << v;
    }
    // Can use C++11 range-for:
    for (const QVariant &v : iterable) {
        qDebug() << v;
    }
    // Can use iterators:
    QSequentialIterable::const_iterator it = iterable.begin();
    const QSequentialIterable::const_iterator end = iterable.end();
    for ( ; it != end; ++it) {
        qDebug() << *it;
    }
}

См. также setValue(), fromValue(), canConvert() и Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().

template <typename T> T QVariant::view()

Возвращает изменяемый вид типа шаблона T на хранимое значение. Используйте canView(), чтобы узнать, поддерживается ли такой вид. Если такой вид создать нельзя, возвращает хранимое значение, преобразованное к типу шаблона T. Используйте canConvert(), чтобы узнать, можно ли преобразовать тип. Если значение нельзя ни просмотреть, ни преобразовать, возвращается значение по умолчанию.

См. также canView() и Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE().

Связанные нечлены

[alias] QVariantHash

Синоним для QHash<QString, QVariant>.

[alias] QVariantList

Синоним для QList<QVariant>.

[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, что означает, что два значения могут быть равны, даже если одно из них имеет значение null, а другое — нет.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qvariant.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API