Spec-Zone.ru › Qt 5.11

Класс QVariant

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

Заголовок: #include <QVariant>
qmake: QT += core
  • Список всех членов, включая унаследованные
  • Устаревшие члены

Открытые типы

класс Handler
класс Private
класс PrivateShared

Открытые функции

QVariant()
QVariant(QVariant::Type type)
QVariant(const QRegularExpression &re)
QVariant(const QUrl &val)
QVariant(const QEasingCurve &val)
QVariant(const QUuid &val)
QVariant(const QJsonValue &val)
QVariant(const QJsonObject &val)
QVariant(const QJsonArray &val)
QVariant(const QJsonDocument &val)
QVariant(const QModelIndex &val)
QVariant(const QPersistentModelIndex &val)
QVariant(QVariant &&other)
QVariant(int typeId, const void *copy)
QVariant(const QVariant &p)
QVariant(QDataStream &s)
QVariant(int val)
QVariant(uint val)
QVariant(qlonglong val)
QVariant(qulonglong val)
QVariant(bool val)
QVariant(double val)
QVariant(float val)
QVariant(const char *val)
QVariant(const QByteArray &val)
QVariant(const QBitArray &val)
QVariant(const QString &val)
QVariant(QLatin1String val)
QVariant(const QStringList &val)
QVariant(QChar c)
QVariant(const QDate &val)
QVariant(const QTime &val)
QVariant(const QDateTime &val)
QVariant(const QList<QVariant> &val)
QVariant(const QMap<QString, QVariant> &val)
QVariant(const QHash<QString, QVariant> &val)
QVariant(const QSize &val)
QVariant(const QSizeF &val)
QVariant(const QPoint &val)
QVariant(const QPointF &val)
QVariant(const QLine &val)
QVariant(const QLineF &val)
QVariant(const QRect &val)
QVariant(const QRectF &val)
QVariant(const QLocale &l)
QVariant(const QRegExp &regExp)
~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
float toFloat(bool *ok = nullptr) const
QHash<QString, QVariant> toHash() const
END_OF_DOCUMENT_MARKER
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
bool operator<=(const QVariant &v) const
QVariant & operator=(const QVariant &variant)
QVariant & operator=(QVariant &&other)
bool operator==(const QVariant &v) const
bool operator>(const QVariant &v) const
bool operator>=(const QVariant &v) const

Статические публичные члены

QVariant fromStdVariant(const int &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)

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

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

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

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

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

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

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

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

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

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

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

Замечание по типам 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.

Документация по функциям-членам

QVariant::QVariant()

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

QVariant::QVariant(QVariant::Type type)

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

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

QVariant::QVariant(const QRegularExpression &re)

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

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

QVariant::QVariant(const QUrl &val)

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

QVariant::QVariant(const QEasingCurve &val)

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

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

QVariant::QVariant(const QUuid &val)

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

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

QVariant::QVariant(const QJsonValue &val)

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

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

QVariant::QVariant(const QJsonObject &val)

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

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

QVariant::QVariant(const QJsonArray &val)

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

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

QVariant::QVariant(const QJsonDocument &val)

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

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

QVariant::QVariant(const QModelIndex &val)

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

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

QVariant::QVariant(const QPersistentModelIndex &val)

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

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

QVariant::QVariant(QVariant &&other)

Создаёт QVariant по значению, указав на тот же объект, на который указывал other.

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

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

Создаёт вариант типа typeId и инициализирует его с помощью copy, если copy не равен 0.

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

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

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

QVariant::QVariant(const QVariant &p)

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

QVariant::QVariant(QDataStream &s)

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

QVariant::QVariant(int val)

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

QVariant::QVariant(uint val)

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

QVariant::QVariant(qlonglong val)

Создаёт новый вариант со значением целого числа типа long long val.

QVariant::QVariant(qulonglong val)

Создаёт новый вариант со значением целого беззнакового числа типа long long val.

QVariant::QVariant(bool val)

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

QVariant::QVariant(double val)

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

QVariant::QVariant(float val)

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

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

QVariant::QVariant(const char *val)

Создаёт новый вариант со строковым значением val. Вариант создаёт глубокую копию val в QString, предполагая кодировку UTF-8 для входного значения val.

Обратите внимание, что val преобразуется в QString для хранения в варианте, и QVariant::userType() вернёт QMetaType::QString для варианта.

Вы можете отключить этот оператор, определив QT_NO_CAST_FROM_ASCII при компиляции своих приложений.

QVariant::QVariant(const QByteArray &val)

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

QVariant::QVariant(const QBitArray &val)

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

QVariant::QVariant(const QString &val)

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

QVariant::QVariant(QLatin1String val)

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

QVariant::QVariant(const QStringList &val)

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

QVariant::QVariant(QChar c)

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

QVariant::QVariant(const QDate &val)

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

QVariant::QVariant(const QTime &val)

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

QVariant::QVariant(const QDateTime &val)

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

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

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

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

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

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

Создает новый вариант с хешем QVariantов, val.

QVariant::QVariant(const QSize &val)

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

QVariant::QVariant(const QSizeF &val)

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

QVariant::QVariant(const QPoint &val)

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

QVariant::QVariant(const QPointF &val)

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

QVariant::QVariant(const QLine &val)

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

QVariant::QVariant(const QLineF &val)

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

QVariant::QVariant(const QRect &val)

Создает новый вариант со значением прямоугольника val.

QVariant::QVariant(const QRectF &val)

Создает новый вариант со значением прямоугольника val.

QVariant::QVariant(const QLocale &l)

Создает новый вариант со значением локали l.

QVariant::QVariant(const QRegExp &regExp)

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

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 (если элементы списка могут быть преобразованы в QString)
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().

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

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

[static] QVariant QVariant::fromStdVariant(const int &value)

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

Примечание: с этим методом вам не нужно регистрировать переменную как Qt metatype, поскольку std::variant разрешается до хранения. Однако типы компонентов должны быть зарегистрированы.

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

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

[static] QVariant QVariant::fromValue(const T &value)

Возвращает QVariant, содержащий копию value. Ведёт себя точно так же, как setValue() в остальных случаях.

Пример:

MyCustomStruct s;
return QVariant::fromValue(s);

Примечание: если вы работаете с пользовательскими типами, вы должны использовать макрос Q_DECLARE_METATYPE() для регистрации вашего пользовательского типа.

См. также setValue() и value().

bool QVariant::isNull() const

Возвращает true , если это нулевая переменная, в противном случае false. Переменная считается нулевой, если она не содержит инициализированного значения или содержащее значение — нулевой указатель или экземпляр встроенного типа, имеющего метод isNull, в этом случае результат будет таким же, как при вызове isNull на обернутом объекте.

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

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

bool QVariant::isValid() const

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

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

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

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

void QVariant::setValue(const T &value)

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

Пример:

QVariant v;

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

MyCustomStruct c;
v.setValue(c);

...

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

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

void QVariant::swap(QVariant &other)

Меняет местами переменную other с этой переменной. Это очень быстро и никогда не терпит неудачу.

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

QBitArray QVariant::toBitArray() const

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

См. также canConvert(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>, если у вариативного объекта type() 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>, если у вариативного объекта type() 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().

END_OF_DOCUMENT_MARKER

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". Некорректный вариант возвращает 0.

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

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

Возвращает нулевой указатель, если тип — QMetaType::UnknownType или не существует.

int QVariant::userType() const

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

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

T QVariant::value() const

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

Если тип T поддерживается QVariant, эта функция ведет себя точно так же, как toString(), toInt() и т. д.

Пример:

QVariant v;

MyCustomStruct c;
if (v.canConvert<MyCustomStruct>())
    c = v.value<MyCustomStruct>();

v = 7;
int i = v.value<int>();                        // same as v.toInt()
QString s = v.value<QString>();                // same as v.toString(), s is now "7"
MyCustomStruct c2 = v.value<MyCustomStruct>(); // conversion failed, c2 is empty

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

Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.

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

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

Сравнивает этот QVariant с v и возвращает true если этот QVariant меньше или равен v.

Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.

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

QVariant &QVariant::operator=(const QVariant &variant)

Присваивает значение варианта variant этому варианту.

QVariant &QVariant::operator=(QVariant &&other)

Перемещающее присваивание other этому экземпляру QVariant.

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

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

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

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

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

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

Сравнивает этот QVariant с v и возвращает true если этот QVariant больше v.

Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.

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

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

Сравнивает этот QVariant с v и возвращает true если этот QVariant больше или равен v.

Примечание: Сравнение может быть недоступно для типа, хранящегося в этом QVariant или в v.

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

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

typedef QVariantHash

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

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

typedef QVariantList

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

typedef QVariantMap

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

T qvariant_cast(const QVariant &value)

Возвращает заданное значение value, преобразованное к типу шаблона T.

Эта функция эквивалентна QVariant::value().

См. также QVariant::value().

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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