QVariant
(необходимый для QSettings
класс), поддерживает создание от QMap<QString, QVariant>
Но пытаясь инициализировать что-то вроде этого:
QMap<QString, QVariant(QMap<QString, QVariant>)> i;
Дает ошибку:
функция возвращая функцию.
Таким образом я попробовал QMap<QString, QVariant>
перегрузка для QVariant()
и добрался
ошибка: никакая функция соответствия для вызова к
QVariant::QVariant(QMap<QString, QMap<QString, int> >&)
Теперь я попробовал преобразование типа:
QMap<QString, (QVariant)QMap<QString, QVariant> > i;
и добрался
аргумент шаблона 2 недопустим
недопустимый тип в объявлении прежде';
'маркер
Таким образом, что необходимый вуду должен преобразовать вложенный QMap
к a QVariant
объект?
Ошибка заключается в том, что QVariant(...)
- это не тип, а функция (c-tor).
Вам следовало бы просто использовать: Map
и использовать QVariant(QMap
только при присвоении значений карте. Дело в том, что QVariant
- это что угодно на самом деле. Поэтому карта из QVariants
может иметь int
в одной позиции (содержащейся в QVariant
) и QDate
в другой. Поэтому при объявлении типа вы не можете указать, какие типы вы хотите, чтобы содержал QVariant
.
В QMap
вы определили отображение строки в тип функции. Что вам действительно нужно, так это QMap
.
Вы не хотите QMap
, потому что это просто синтаксически неверно. Оба параметра шаблона должны быть именами типов, а приведение типов не может быть частью имени типа.
Помещение QMap
(или почти любого другого типа QMap
) в QVariant
не сработает. Единственный тип QMap
, который можно преобразовать в QVariant
, - это QMap
.
Для этого типа может быть полезно определение типа: QVariantMap
. Если в этой ситуации вы будете использовать QVariantMap
, то у вас все будет работать правильно.