QVariant и std::size_t

QVariant не поддерживает std::size_t. Каков правильный способ создания объекта QVariant с использованием значения std::size_t без потери каких-либо ограничений размера, зависящих от платформы?


person Baradé    schedule 23.08.2014    source источник


Ответы (1)


QVariant не поддерживает size_t напрямую, но вы все равно можете его сохранить:

QVariant v;
size_t s1 = 5;
v.setValue(s1);
qDebug() << v;

// get back the data
size_t s2 = v.value<size_t>();
qDebug() << s2;

Если вы хотите хранить size_t в файле или базе данных согласованным образом, вы можете преобразовать его в quint64, который всегда равен 8 байтам. Или quint32, если самый большой размер size_t ваших платформ равен 4 байтам:

QVariant v;
size_t s1 = 5;
quint64 biggest = s1;
qDebug() << "sizeof(quint64) =" << sizeof(quint64);

v.setValue(biggest);
qDebug() << v;

// get back the data
quint64 biggest2 = v.value<quint64>();
qDebug() << biggest2;
size_t s2 = biggest2;
person fxam    schedule 23.08.2014