Давайте рассмотрим этот пример:
QVariant v1(1);
QVariant v2("goofy");
QVariantList list;
list << v1 << v2;
for (const auto& var : list) {
qdebug() << var;
// nasty part
if (var.type == QVariant::Int) {
int value = var.toInt();
// do something
} else if (var.type == QVariant::QString) {
QString value = var.toString();
// do something
}
}
Функция отладки показывает тип внутренней памяти QVariant :
QVariant(int, 1) QVariant(QString, "goofy")
Есть ли способ избежатьif
s и сделать явное приведение для доступа к внутреннему типу?Более конкретно, чтобы получить значение, я хотел бы иметь возможность написать что-то вроде этого:
auto value = var.ToData();
Редактировать : поскольку QVariant может содержать много типов, и вы даже можете добавить пользовательскиетипы на нем, было бы достаточно ограничить проблему только базовыми типами (int, double, bool, string)