Быстрый просмотр кода показывает, что QVariant
- это в основном union
нескольких примитивных типов (int
, float
и т. Д.), Указатель QObject
и указатель void*
для все остальное, что не является QObject
и не является примитивным. Существует также элемент данных типа, который позволяет ему знать, что на самом деле там хранится. Похоже, что издержки не намного больше, чем хранение члена структуры, проверка его на совместимость типов и, возможно, преобразование (например, int в float)