Как пользоваться QVariant

Как пользоваться QVariant

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

В самом QtSDK этот класс применяется там, где нежелательна привязка к конкретному типу:

  1. QSettings;
  2. Моделях;
  3. При работе с базами данных.

Принцип работы QVariant

Для большинства примитивных типов C++ и встроенных классов Qt предусмотрены конструкторы QVariant:

Распаковать значения можно с помощью специальных функций-членов:

Другой способ заключается в использовании шаблонной функции value< T >():

Если перепутать запрашиваемый при распаковке тип, то в большинстве случаев будет возвращено значение по умолчанию.

Шаблонная функция распаковки значений QVariant

Сначала лучше проверить, что состояние обертки в порядке и конвертация допустима. Можно использовать подобную вспомогательную шаблонную функцию:

Если преобразование не удалось, то unpack() вернет предусмотренное значение по умолчанию. Например:

Пользовательский тип в QVariant

Чтобы поместить в QVariant свой собственный класс MyClass, необходимо:

  1. Наличие в MyClass конструктора по умолчанию;
  2. Наличие в MyClass конструктора копирования;
  3. Наличие в MyClass деструктора;
  4. Объявление мета-типа с помощью макроса Q_DECLARE_METATYPE( MyClass ).

Пример такого класса:

Использовать его с QVariant не сложнее, чем со стандартными классами:

Динамические структуры на основе QVariant

С помощью QVariant можно создавать удивительно гибкие классы:

VariableContainer позволяет определять динамические структуры с произвольным количеством и содержанием полей:

Понравилась статья? Поделиться с друзьями:
Добавить комментарий