Spec-Zone.ru › Qt 5.12

Класс QVariant

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

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

Публичные типы

класс Обработчик
класс Приватный
класс Приватный общий

Публичные функции

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)

Защищенные переменные

QVariant::Private d

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

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 хранит одно значение одного типа() за раз. (Некоторые типы() многозначные, например, список строк.) Вы можете узнать, какой тип, 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)

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

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

Создаёт новую переменную типа QVariant со словарем QVariant значений, val.

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

Создаёт новую переменную типа QVariant с хешем QVariant значений, val.

QVariant::QVariant(const QSize &val)

Создаёт новую переменную типа QVariant с размером val.

QVariant::QVariant(const QSizeF &val)

Создаёт новую переменную типа QVariant с размером val.

QVariant::QVariant(const QPoint &val)

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

QVariant::QVariant(const QPointF &val)

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

QVariant::QVariant(const QLine &val)

Создаёт новую переменную типа QVariant с линией val.

QVariant::QVariant(const QLineF &val)

Создаёт новую переменную типа QVariant с линией val.

QVariant::QVariant(const QRect &val)

Создаёт новую переменную типа QVariant с прямоугольником val.

QVariant::QVariant(const QRectF &val)

Создаёт новую переменную типа QVariant с прямоугольником val.

QVariant::QVariant(const QLocale &l)

Создаёт новую переменную типа QVariant с локалью l.

QVariant::QVariant(const QRegExp &regExp)

Создаёт новую переменную типа QVariant с регулярным выражением 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 контейнера сам был метатипом.

END_OF_DOCUMENT_MARKER

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

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

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

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

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

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

int QVariant::userType() const

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

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

T QVariant::value() const

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

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

Пример:

QVariant v;

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

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

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

Spec-Zone.ru

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