Spec-Zone.ru › Qt 5.15

Класс QVariant

Класс QVariant ведет себя как объединение для наиболее распространённых типов данных Qt. Подробнее...

Заголовок: #include <QVariant>
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 QRegExp &regExp)
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<QString, QVariant> &val)
QVariant(const QMap<QString, QVariant> &val)
QVariant(const QList<QVariant> &val)
QVariant(const QDateTime &val)
QVariant(const QTime &val)
QVariant(const 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(QDataStream &s)
QVariant(const QVariant &p)
QVariant(int typeId, const void *copy)
QVariant(QVariant::Type type)
QVariant()
QVariant & operator=(QVariant &&other)
QVariant & operator=(const QVariant &variant)
~QVariant()
bool canConvert(int targetTypeId) const
bool canConvert() const
void clear()
bool convert(int targetTypeId)
bool isNull() const
bool isValid() const
void setValue(const T &value)
void swap(QVariant &other)
QBitArray toBitArray() const
bool toBool() const
QByteArray toByteArray() const
QChar toChar() const
QDate toDate() const
QDateTime toDateTime() const
double toDouble(bool *ok = nullptr) const
QEasingCurve toEasingCurve() const
END_OF_DOCUMENT_MARKER
float toFloat(bool *ok = nullptr) const
QHash<QString, QVariant> toHash() const
int toInt(bool *ok = nullptr) const
QJsonArray toJsonArray() const
QJsonDocument toJsonDocument() const
QJsonObject toJsonObject() const
QJsonValue toJsonValue() const
QLine toLine() const
QLineF toLineF() const
QList<QVariant> toList() const
QLocale toLocale() const
qlonglong toLongLong(bool *ok = nullptr) const
QMap<QString, QVariant> toMap() const
QModelIndex toModelIndex() const
QPersistentModelIndex toPersistentModelIndex() const
QPoint toPoint() const
QPointF toPointF() const
qreal toReal(bool *ok = nullptr) const
QRect toRect() const
QRectF toRectF() const
QRegExp toRegExp() const
QRegularExpression toRegularExpression() const
QSize toSize() const
QSizeF toSizeF() const
QString toString() const
QStringList toStringList() const
QTime toTime() const
uint toUInt(bool *ok = nullptr) const
qulonglong toULongLong(bool *ok = nullptr) const
QUrl toUrl() const
QUuid toUuid() const
QVariant::Type type() const
const char * typeName() const
int userType() const
T value() const
bool operator!=(const QVariant &v) const
bool operator==(const QVariant &v) const

Статические открытые члены

QVariant fromStdVariant(const std::variant<Types...> &value)
QVariant fromValue(const T &value)
QVariant::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)

Подробное описание

Поскольку C++ запрещает объединения, включающие типы с конструкторами или деструкторами по умолчанию, большинство интересных классов Qt не могут быть использованы в объединениях. Без QVariant это была бы проблема для QObject::property() и для работы с базами данных и т. д.

Объект QVariant хранит единственное значение одного типа type() за раз. (Некоторые типы type() являются многозначными, например, список строк.) Вы можете узнать, какой тип, T, хранит переменная, преобразовать его в другой тип с помощью convert(), получить его значение с помощью одной из функций toT() (например, toSize()) и проверить, можно ли преобразовать тип в определенный тип с помощью canConvert().

Методы с именем toT() (например, toInt(), toString()) являются постоянными. Если вы запрашиваете хранимый тип, они возвращают копию хранимого объекта. Если вы запрашиваете тип, который можно сгенерировать из хранимого типа, toT() копирует, преобразует и оставляет сам объект неизменным. Если вы запрашиваете тип, который не может быть сгенерирован из хранимого типа, результат зависит от типа; см. документацию функции для получения подробностей.

Вот пример кода, демонстрирующий использование QVariant:

QDataStream out(...);
QVariant v(123);                // The variant now contains an int
int x = v.toInt();              // x = 123
out << v;                       // Writes a type tag and an int to out
v = QVariant("hello");          // The variant now contains a QByteArray
v = QVariant(tr("hello"));      // The variant now contains a QString
int y = v.toInt();              // y = 0 since v cannot be converted to an int
QString s = v.toString();       // s = tr("hello")  (see QObject::tr())
out << v;                       // Writes a type tag and a QString to out
...
QDataStream in(...);            // (opening the previously written stream)
in >> v;                        // Reads an Int variant
int z = v.toInt();              // z = 123
qDebug("Type is %s",            // prints "Type is int"
        v.typeName());
v = v.toInt() + 100;            // The variant now hold the value 223
v = QVariant(QStringList());

Вы даже можете хранить QList<QVariant> и QMap<QString, QVariant> значения в переменной, поэтому вы можете легко создавать произвольно сложные структуры данных произвольных типов. Это очень мощно и универсально, но может оказаться менее эффективным с точки зрения памяти и скорости, чем хранение определенных типов в стандартных структурах данных.

QVariant также поддерживает понятие нулевых значений, где у вас может быть определенный тип без установленного значения. Однако обратите внимание, что типы QVariant можно преобразовать только после установки значения.

QVariant x, y(QString()), z(QString(""));
x.convert(QVariant::Int);
// x.isNull() == true
// y.isNull() == true, z.isNull() == false

QVariant можно расширить для поддержки других типов, помимо тех, которые указаны в перечислении Type. Дополнительные сведения см. в разделе Создание пользовательских типов Qt.

Примечание по типам графического интерфейса

Поскольку 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 &&other)

Создаёт экземпляр QVariant, ссылающийся на тот же объект, на который ссылался other.

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

QVariant::QVariant(const QPersistentModelIndex &val)

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

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

QVariant::QVariant(const QModelIndex &val)

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

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

QVariant::QVariant(const QJsonDocument &val)

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

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

QVariant::QVariant(const QJsonArray &val)

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

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

QVariant::QVariant(const QJsonObject &val)

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

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

QVariant::QVariant(const QJsonValue &val)

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

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

QVariant::QVariant(const QUrl &val)

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

QVariant::QVariant(const QUuid &val)

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

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

QVariant::QVariant(const QEasingCurve &val)

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

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

QVariant::QVariant(const QRegularExpression &re)

Создаёт новый вариант со значением регулярного выражения re.

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

QVariant::QVariant(const QRegExp &regExp)

Создаёт новый вариант со значением regexp regExp.

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(const QTime &val)

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

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

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

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(QDataStream &s)

Считывает вариант из потока данных, s.

QVariant::QVariant(const QVariant &p)

Создаёт копию варианта, p, переданного в качестве аргумента в этот конструктор.

QVariant::QVariant(int typeId, const void *copy)

Создаёт вариант типа typeId и инициализирует его значением copy, если copy не nullptr.

Обратите внимание, что вы должны передать адрес переменной, которую вы хотите сохранить.

Обычно вам не нужно использовать этот конструктор, используйте QVariant::fromValue() вместо него, чтобы создать варианты из типов указателей, представленных QMetaType::VoidStar, и QMetaType::QObjectStar.

См. также QVariant::fromValue() и QMetaType::Type.

QVariant::QVariant(QVariant::Type type)

Создаёт неинициализированный вариант типа type. Это создаст вариант в специальном нулевом состоянии, который при обращении вернёт значение по умолчанию для типа type.

См. также isNull().

QVariant::QVariant()

Создаёт недействительный вариант.

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() подкласса.

bool QVariant::canConvert(int targetTypeId) const

Возвращает true, если тип варианта может быть преобразован к запрошенному типу targetTypeId. Такое преобразование выполняется автоматически при вызове методов toInt(), toBool(), ...

Следующие преобразования выполняются автоматически:

Тип Автоматически преобразуется в
QMetaType::Bool QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QByteArray QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong, QMetaType::QUuid
QMetaType::QChar QMetaType::Bool, QMetaType::Int, QMetaType::UInt, QMetaType::LongLong, QMetaType::ULongLong
QMetaType::QColor QMetaType::QString
QMetaType::QDate QMetaType::QDateTime, QMetaType::QString
QMetaType::QDateTime QMetaType::QDate, QMetaType::QString, QMetaType::QTime
QMetaType::Double QMetaType::Bool, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QFont QMetaType::QString
QMetaType::Int QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QKeySequence QMetaType::Int, QMetaType::QString
QMetaType::QVariantList QMetaType::QStringList (если элементы списка могут быть преобразованы в QStrings)
QMetaType::LongLong QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::QString, QMetaType::UInt, QMetaType::ULongLong
QMetaType::QPoint QMetaType::QPointF
QMetaType::QRect QMetaType::QRectF
QMetaType::QString QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::QColor, QMetaType::QDate, QMetaType::QDateTime, QMetaType::Double, QMetaType::QFont, QMetaType::Int, QMetaType::QKeySequence, QMetaType::LongLong, QMetaType::QStringList, QMetaType::QTime, QMetaType::UInt, QMetaType::ULongLong, QMetaType::QUuid
QMetaType::QStringList QMetaType::QVariantList, QMetaType::QString (если список содержит ровно один элемент)
QMetaType::QTime QMetaType::QString
QMetaType::UInt QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::ULongLong
QMetaType::ULongLong QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt
QMetaType::QUuid QMetaType::QByteArray, QMetaType::QString

QVariant, содержащий указатель на тип, производный от QObject, также вернёт true для этой функции, если qobject_cast к типу, описанному targetTypeId, будет успешным. Обратите внимание, что это работает только для подклассов QObject, использующих макрос Q_OBJECT.

QVariant, содержащий последовательный контейнер, также вернёт true для этой функции, если targetTypeId равен QVariantList. Можно перебирать содержимое контейнера без извлечения его в виде (скопированного) QVariantList:

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

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

Это требует, чтобы value_type контейнера сам был метатипом.

Аналогично, QVariant, содержащий последовательный контейнер, также вернёт true для этой функции, если targetTypeId равен QVariantHash или QVariantMap. Можно перебирать содержимое контейнера без извлечения его в виде (скопированного) QVariantHash или QVariantMap:

QHash<int, QString> mapping;
mapping.insert(7, "Seven");
mapping.insert(11, "Eleven");
mapping.insert(42, "Forty-two");

QVariant variant = QVariant::fromValue(mapping);
if (variant.canConvert<QVariantHash>()) {
    QAssociativeIterable iterable = variant.value<QAssociativeIterable>();
    // Can use foreach over the values:
    foreach (const QVariant &v, iterable) {
        qDebug() << v;
    }
    // Can use C++11 range-for over the values:
    for (const QVariant &v : iterable) {
        qDebug() << v;
    }
    // Can use iterators:
    QAssociativeIterable::const_iterator it = iterable.begin();
    const QAssociativeIterable::const_iterator end = iterable.end();
    for ( ; it != end; ++it) {
        qDebug() << *it; // The current value
        qDebug() << it.key();
        qDebug() << it.value();
    }
}

См. также convert(), QSequentialIterable, Q_DECLARE_SEQUENTIAL_CONTAINER_METATYPE(), QAssociativeIterable и Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE().

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().

void QVariant::clear()

Преобразует эту переменную в тип QMetaType::UnknownType и освобождает все используемые ресурсы.

bool QVariant::convert(int targetTypeId)

Преобразует переменную к запрошенному типу targetTypeId. Если преобразование невозможно, значение переменной всё равно изменяется на запрашиваемый тип, но остаётся в очищенном нулевом состоянии, аналогично тому, что создаётся конструктором QVariant(Type).

Возвращает true если текущий тип переменной был успешно преобразован; в противном случае возвращает false.

QVariant, содержащий указатель на тип, производный от QObject, также выполнит преобразование и вернёт true для этой функции, если qobject_cast к типу, описанному в targetTypeId, будет успешным. Обратите внимание, что это работает только для подклассов QObject, использующих макрос Q_OBJECT.

Примечание: Преобразование QVariants, которые являются null из-за отсутствия инициализации или по причине неудачного предыдущего преобразования, всегда завершается неудачей, меняя тип, оставаясь null и возвращая false.

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

[static] 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. Переменная считается нулевой, если она не содержит инициализированного значения, или содержащее значение — nullptr или это экземпляр встроенного типа с методом isNull, в этом случае результат будет таким же, как вызов isNull на обернутом объекте.

Предупреждение: Нулевые переменные — это не единое состояние, и две нулевые переменные могут легко вернуть false в операторе ==, если они не содержат похожие нулевые значения.

См. также convert(int).

bool QVariant::isValid() const

Возвращает true если тип хранения этой переменной не QMetaType::UnknownType; в противном случае возвращает false.

[static] QVariant::Type QVariant::nameToType(const char *name)

Преобразует строковое представление типа хранения, заданного в name, в его представление перечисления.

Если строковое представление не может быть преобразовано в какое-либо представление перечисления, переменная устанавливается в Invalid.

template <typename T> void QVariant::setValue(const T &value)

Хранит копию value. Если T — это тип, который QVariant не поддерживает, используется QMetaType для хранения значения. Ошибка компиляции произойдёт, если QMetaType не поддерживает этот тип.

Пример:

QVariant v;

v.setValue(5);
int i = v.toInt();         // i is now 5
QString s = v.toString()   // s is now "5"

MyCustomStruct c;
v.setValue(c);

...

MyCustomStruct c2 = v.value<MyCustomStruct>();

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

void QVariant::swap(QVariant &other)

Обменивается переменными other и этой переменной. Эта операция очень быстрая и никогда не завершается неудачей.

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

QBitArray QVariant::toBitArray() const

Возвращает переменную как QBitArray, если у переменной userType() имеет значение QMetaType::QBitArray; в противном случае возвращает пустой массив бит.

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

bool QVariant::toBool() const

Возвращает переменную как bool, если у переменной userType() имеет значение Bool.

Возвращает true, если у переменной userType() имеет значение QMetaType::Bool, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::UInt или QMetaType::ULongLong и значение ненулевое, или если у переменной тип QMetaType::QString или QMetaType::QByteArray и её строка в нижнем регистре не является пустой, "0" или "false"; в противном случае возвращает false.

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

QByteArray QVariant::toByteArray() const

Возвращает переменную как QByteArray, если у переменной userType() имеет значение QMetaType::QByteArray или QMetaType::QString (преобразованная с помощью QString::fromUtf8()); в противном случае возвращает пустой массив байтов.

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

QChar QVariant::toChar() const

Возвращает переменную как QChar, если у переменной userType() имеет значение QMetaType::QChar, QMetaType::Int или QMetaType::UInt; в противном случае возвращает недопустимый QChar.

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

QDate QVariant::toDate() const

Возвращает переменную как QDate, если у переменной userType() имеет значение QMetaType::QDate, QMetaType::QDateTime или QMetaType::QString; в противном случае возвращает недопустимую дату.

Если тип type() равен QMetaType::QString, будет возвращена недопустимая дата, если строка не может быть проанализирована как дата в формате Qt::ISODate.

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

QDateTime QVariant::toDateTime() const

Возвращает переменную как QDateTime, если у переменной userType() имеет значение QMetaType::QDateTime, QMetaType::QDate или QMetaType::QString; в противном случае возвращает недопустимую дату/время.

Если тип type() равен QMetaType::QString, будет возвращена недопустимая дата/время, если строка не может быть проанализирована как дата/время в формате Qt::ISODate.

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

double QVariant::toDouble(bool *ok = nullptr) const

Возвращает вариант как double, если у варианта есть userType() QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.0.

Если ok не равен null: *ok устанавливается в true, если значение можно преобразовать в double; в противном случае *ok устанавливается в false.

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

QEasingCurve QVariant::toEasingCurve() const

Возвращает вариант как QEasingCurve, если у варианта есть userType() QMetaType::QEasingCurve; в противном случае возвращает кривую сглаживания по умолчанию.

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

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

float QVariant::toFloat(bool *ok = nullptr) const

Возвращает вариант как float, если у варианта есть userType() QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.0.

Если ok не равен null: *ok устанавливается в true, если значение можно преобразовать в double; в противном случае *ok устанавливается в false.

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

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

QHash<QString, QVariant> QVariant::toHash() const

Возвращает вариант как QHash<QString, QVariant>, если у варианта тип QMetaType::QVariantHash; в противном случае возвращает пустой массив.

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

int QVariant::toInt(bool *ok = nullptr) const

Возвращает вариант как int, если у варианта есть userType() QMetaType::Int, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.

Если ok не равен null: *ok устанавливается в true, если значение можно преобразовать в int; в противном случае *ok устанавливается в false.

Предупреждение: Если значение можно преобразовать в QMetaType::LongLong, но оно слишком большое, чтобы быть представленным в int, возникшее арифметическое переполнение не будет отражено в ok. Простым решением является использование QString::toInt().

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

QJsonArray QVariant::toJsonArray() const

Возвращает вариант как QJsonArray, если у варианта userType() QJsonArray; в противном случае возвращает QJsonArray по умолчанию.

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

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

QJsonDocument QVariant::toJsonDocument() const

Возвращает вариант как QJsonDocument, если у варианта userType() QJsonDocument; в противном случае возвращает QJsonDocument по умолчанию.

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

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

QJsonObject QVariant::toJsonObject() const

Возвращает вариант как QJsonObject, если у варианта userType() QJsonObject; в противном случае возвращает QJsonObject по умолчанию.

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

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

QJsonValue QVariant::toJsonValue() const

Возвращает вариант как QJsonValue, если у варианта userType() QJsonValue; в противном случае возвращает QJsonValue по умолчанию.

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

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

QLine QVariant::toLine() const

Возвращает вариант как QLine, если у варианта userType() QMetaType::QLine; в противном случае возвращает недействительную QLine.

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

QLineF QVariant::toLineF() const

Возвращает вариант как QLineF, если у варианта userType() QMetaType::QLineF; в противном случае возвращает недействительную QLineF.

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

QList<QVariant> QVariant::toList() const

Возвращает вариант как QVariantList, если у варианта userType() QMetaType::QVariantList или QMetaType::QStringList; в противном случае возвращает пустой список.

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

QLocale QVariant::toLocale() const

Возвращает вариант как QLocale, если у варианта userType() QMetaType::QLocale; в противном случае возвращает недействительный QLocale.

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

qlonglong QVariant::toLongLong(bool *ok = nullptr) const

Возвращает вариант как long long int, если у варианта userType() QMetaType::LongLong, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.

Если ok не равен null: *ok устанавливается в true, если значение можно преобразовать в int; в противном случае *ok устанавливается в false.

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

QMap<QString, QVariant> QVariant::toMap() const

Возвращает вариант как QMap<QString, QVariant>, если у варианта тип QMetaType::QVariantMap; в противном случае возвращает пустой массив.

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

QModelIndex QVariant::toModelIndex() const

Возвращает вариант как QModelIndex, если у варианта userType() QModelIndex; в противном случае возвращает QModelIndex по умолчанию.

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

См. также canConvert(int targetTypeId), convert() и toPersistentModelIndex().

QPersistentModelIndex QVariant::toPersistentModelIndex() const

Возвращает значение варианта в виде QPersistentModelIndex, если у варианта есть userType() QPersistentModelIndex; в противном случае возвращает QPersistentModelIndex по умолчанию.

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

См. также canConvert(int targetTypeId), convert() и toModelIndex().

QPoint QVariant::toPoint() const

Возвращает значение варианта в виде QPoint, если у варианта есть userType() QMetaType::QPoint или QMetaType::QPointF; в противном случае возвращает нулевой QPoint.

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

QPointF QVariant::toPointF() const

Возвращает значение варианта в виде QPointF, если у варианта есть userType() QMetaType::QPoint или QMetaType::QPointF; в противном случае возвращает нулевой QPointF.

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

qreal QVariant::toReal(bool *ok = nullptr) const

Возвращает значение варианта в виде qreal, если у варианта есть userType() QMetaType::Double, QMetaType::Float, QMetaType::Bool, QMetaType::QByteArray, QMetaType::Int, QMetaType::LongLong, QMetaType::QString, QMetaType::UInt или QMetaType::ULongLong; в противном случае возвращает 0.0.

Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в double; в противном случае *ok устанавливается в false.

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

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

QRect QVariant::toRect() const

Возвращает значение варианта в виде QRect, если у варианта есть userType() QMetaType::QRect; в противном случае возвращает недействительный QRect.

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

QRectF QVariant::toRectF() const

Возвращает значение варианта в виде QRectF, если у варианта есть userType() QMetaType::QRect или QMetaType::QRectF; в противном случае возвращает недействительный QRectF.

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

QRegExp QVariant::toRegExp() const

Возвращает значение варианта в виде QRegExp, если у варианта есть userType() QMetaType::QRegExp; в противном случае возвращает пустой QRegExp.

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

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

QRegularExpression QVariant::toRegularExpression() const

Возвращает значение варианта в виде QRegularExpression, если у варианта есть userType() QRegularExpression; в противном случае возвращает пустую QRegularExpression.

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

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

QSize QVariant::toSize() const

Возвращает значение варианта в виде QSize, если у варианта есть userType() QMetaType::QSize; в противном случае возвращает недействительный QSize.

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

QSizeF QVariant::toSizeF() const

Возвращает значение варианта в виде QSizeF, если у варианта есть userType() QMetaType::QSizeF; в противном случае возвращает недействительный QSizeF.

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

QString QVariant::toString() const

Возвращает значение варианта в виде QString, если у варианта есть userType(), включая, но не ограничиваясь:

QMetaType::QString, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::QDate, QMetaType::QDateTime, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QStringList, QMetaType::QTime, QMetaType::UInt или QMetaType::ULongLong.

Вызов QVariant::toString() для неподдерживаемого варианта возвращает пустую строку.

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

QStringList QVariant::toStringList() const

Возвращает значение варианта в виде QStringList, если у варианта есть userType() QMetaType::QStringList, QMetaType::QString или QMetaType::QVariantList типа, который может быть преобразован в QString; в противном случае возвращает пустой список.

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

QTime QVariant::toTime() const

Возвращает значение варианта в виде QTime, если у варианта есть userType() QMetaType::QTime, QMetaType::QDateTime или QMetaType::QString; в противном случае возвращает недействительное время.

Если type() имеет значение QMetaType::QString, недействительное время будет возвращено, если строка не может быть проанализирована как время в формате Qt::ISODate.

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

uint QVariant::toUInt(bool *ok = nullptr) const

Возвращает значение варианта в виде целого без знака, если у варианта есть userType() QMetaType::UInt, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString или QMetaType::ULongLong; в противном случае возвращает 0.

Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в целое без знака; в противном случае *ok устанавливается в false.

Предупреждение: Если значение может быть преобразовано в QMetaType::ULongLong, но слишком велико для представления в виде целого без знака, возникшее арифметическое переполнение не будет отражено в ok. Простым решением является использование QString::toUInt().

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

qulonglong QVariant::toULongLong(bool *ok = nullptr) const

Возвращает значение варианта в виде целого без знака 64-битного типа, если у варианта есть type() QMetaType::ULongLong, QMetaType::Bool, QMetaType::QByteArray, QMetaType::QChar, QMetaType::Double, QMetaType::Int, QMetaType::LongLong, QMetaType::QString или QMetaType::UInt; в противном случае возвращает 0.

Если ok не равен null: *ok устанавливается в true, если значение может быть преобразовано в целое; в противном случае *ok устанавливается в false.

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

QUrl QVariant::toUrl() const

Возвращает значение варианта в виде QUrl, если у варианта есть userType() QMetaType::QUrl; в противном случае возвращает недействительный QUrl.

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

QUuid QVariant::toUuid() const

Возвращает значение варианта как QUuid, если у варианта тип type() равен QMetaType::QUuid, QMetaType::QByteArray или QMetaType::QString; в противном случае возвращает QUuid по умолчанию.

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

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

QVariant::Type QVariant::type() const

Возвращает тип хранилища значения, сохранённого в варианте. Хотя эта функция объявлена как возвращающая QVariant::Type, значение возврата следует интерпретировать как QMetaType::Type. В частности, QVariant::UserType возвращается только если значение равно или больше QMetaType::User.

Обратите внимание, что значения в диапазонах от QVariant::Char до QVariant::RegExp и от QVariant::Font до QVariant::Transform соответствуют значениям в диапазонах от QMetaType::QChar до QMetaType::QRegExp и от QMetaType::QFont до QMetaType::QQuaternion.

Обратите особое внимание при работе с вариантами типа char и QChar. Обратите внимание, что нет конструктора QVariant специально для типа char, но есть конструктор для QChar. Для варианта типа QChar эта функция возвращает QVariant::Char, что эквивалентно QMetaType::QChar, но для варианта типа char, эта функция возвращает QMetaType::Char, что не эквивалентно QVariant::Char.

Также обратите внимание, что типы void*, long, short, unsigned long, unsigned short, unsigned char, float, QObject*, и QWidget* представлены в QMetaType::Type, но не в QVariant::Type, и они могут быть возвращены этой функцией. Однако, они считаются пользовательскими типами при проверке на QVariant::Type.

Чтобы проверить, содержит ли экземпляр QVariant тип данных, совместимый с интересующим вас типом, используйте canConvert().

const char *QVariant::typeName() const

Возвращает имя типа, хранящегося в варианте. Возвращаемые строки описывают используемый C++ тип данных для хранения данных: например, "QFont", "QString" или "QVariantList". Для варианта типа Invalid возвращается 0.

[static] const char *QVariant::typeToName(int typeId)

Преобразует целочисленное представление типа хранилища, typeId, в его строковое представление.

Возвращает nullptr если тип равен QMetaType::UnknownType или не существует.

int QVariant::userType() const

Возвращает тип хранилища значения, сохранённого в варианте. Для типов, не являющихся пользовательскими, это то же самое, что и type().

См. также type().

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().

bool QVariant::operator!=(const QVariant &v) const

Сравнивает этот QVariant с v и возвращает true если они не равны; в противном случае возвращает false.

Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения для него должен быть зарегистрирован с помощью QMetaType::registerComparators().

bool QVariant::operator==(const QVariant &v) const

Сравнивает этот QVariant с v и возвращает true если они равны; в противном случае возвращает false.

QVariant использует оператор равенства типа type(), содержащегося в нём, для проверки на равенство. QVariant попытается преобразовать v, если его тип не совпадает с типом этого варианта. См. canConvert() для списка возможных преобразований.

Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения для него должен быть зарегистрирован с помощью QMetaType::registerComparators().

Связанные нечленённые функции

typedef QVariantHash

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

Этот typedef был добавлен в Qt 4.5.

typedef QVariantList

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

typedef 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.

Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения для него должен быть зарегистрирован с помощью QMetaType::registerComparators().

bool operator==(const QVariant &v1, const QVariant &v2)

Возвращает true если v1 и v2 равны; в противном случае возвращает false.

Если v1 и v2 имеют одинаковый type(), для сравнения используется оператор равенства типа. Если нет, пытается преобразовать v2 в тот же тип, что и у v1. См. canConvert() для списка возможных преобразований.

Результат функции не зависит от результата QVariant::isNull, что означает, что два значения могут быть равны, даже если одно из них null, а другое — нет.

Предупреждение: Чтобы эта функция работала с пользовательским типом, зарегистрированным с помощью qRegisterMetaType(), оператор сравнения для него должен быть зарегистрирован с помощью QMetaType::registerComparators().

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

Spec-Zone.ru

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