Шаг 71.
Библиотека Qt.
Произвольный тип QVariant

    На этом шаге рассмотрим произвольный тип QVariant.

    Объекты класса QVariant могут содержать данные разного типа, включая контейнеры. К этим типам относятся: int, unsigned int, double, bool, QString, QStringList, QImage, QPixmap, QBrush, QColor, QRegExp и др. Важно учитывать то обстоятельство, что частое применение этого типа может отрицательно отразиться на скорости программы и эффективности использования памяти, а также может заметно снизить читабельность самой программы. Поэтому объекты класса QVariant не следует использовать без особой на то необходимости.

    Для создания объектов класса QVariant необходимо передать в конструктор переменную нужного типа. Например:

QVariant v1(34);
QVariant v2(true);
QVariant v2("Turbo Pascal");

    Метод type() позволяет узнать тип записанных в объекте QVariant данных. Этот метод возвращает целочисленный идентификатор типа. Чтобы преобразовать его в строку, следует передать его в статический метод typeToName(). Того же результата можно добиться и вызовом метода typeName(), который возвращает информацию о типе в виде строки:

QVariant v(5.0);
qDebug() << QVariant::typeToName(v.type()); // =>double

    Чтобы получить данные из объекта QVariant нужного типа, существует серия специальных методов toT(), где T — это имя типа. Метод toT() создает новый объект типа T и копирует данные из объекта QVariant в нужный объект. Например:

QVariant v2(23);
int a = v2.toInt() + 5; // a = 28

    Ввиду того, что QVariant реализован в QtCore, соответствующих методов toT() для классов QColor, QImage и QPixmap и др., находящихся в модуле QtGui, не предоставляется.

    Вместо методов toT() для приведения к нужному типу можно использовать также шаблонный метод value<T>(). Наш пример с преобразованием объекта QVariant к целому типу можно преобразовать следующим образом:

QVariant v2(23);
int a = v2.value<int>() + 5;  //a = 28

    На следующем шаге рассмотрим модель общего использования данных.




Предыдущий шаг Содержание Следующий шаг