Как мне конвертировать QMap> в QVariant? - PullRequest
5 голосов
/ 19 июля 2010

QVariant (необходимо для QSettings класса) поддерживает создание из QMap<QString, QVariant>

Но при попытке инициализировать что-то вроде этого:

QMap<QString, QVariant(QMap<QString, QVariant>)> i;

Выдает ошибку:

функция, возвращающая функцию.

Итак, я попробовал перегрузку QMap<QString, QVariant> для QVariant() и получил

ошибка: не найдено соответствующей функции длявызов QVariant::QVariant(QMap<QString, QMap<QString, int> >&)

Теперь я попробовал Typecast:

QMap<QString, (QVariant)QMap<QString, QVariant> > i;

и получил

аргумент шаблона 2 неверен
неверный типв объявлении до токена ';'

Так что же требуется вуду для преобразования вложенного QMap в QVariant объект?

Ответы [ 2 ]

6 голосов
/ 19 июля 2010
  1. В QMap<QString, QVariant(QMap<QString, QVariant>)> вы определили карту из строки в тип функции.То, что вы действительно хотите, это QMap<QString, QVariant>.

  2. Вы не хотите QMap<QString,(QVariant)QMap<QString, QVariant> >, потому что это просто синтаксически неверно.Оба параметра шаблона должны быть именами типов, и typecast не может быть частью имени типа.

  3. Помещение QMap<QString, int> (или почти любого другого типа QMap) вQVariant не будет работать.Единственный тип QMap, который можно преобразовать в QVariant, - это QMap<QString,QVariant>.

    Для этого типа может быть полезна typedef: QVariantMap.Если вы будете использовать QVariantMap для этой ситуации, то все будет работать правильно для вас.

4 голосов
/ 19 июля 2010

Сообщается об ошибке: QVariant(...) это не тип, а функция (c-tor).

Вы должны были просто использовать: Map<QString, QVariant> i; и использовать QVariant(QMap<QString, QVariant>) только при назначении значений карте. Дело в том, что QVariant это что-нибудь на самом деле. Таким образом, карта QVariants может иметь int в одной позиции (содержится в QVariant) и QDate в другой. Поэтому, когда вы объявляете тип, вы не можете указать, какие типы вы хотите QVariant хранить.

...