Мне нужно получить свойство интерфейса DBus, поэтому я сделал interface.property(name)
, Это возвращает QVariant, но карта, которую может вернуть QVariant, QMap<QString, QVariant>
тогда как мне нужно QMap<QString, QDBusVariant>
, Что я должен делать?
Я думаю, что вы ищете этот метод, так как нет QVariant::toQDBusVariant()
метод, по своей сути и по праву:
Возвращает сохраненное значение, преобразованное в тип шаблона T. Вызовите canConvert (), чтобы узнать, можно ли преобразовать тип. Если значение не может быть преобразовано, будет создано значение по умолчанию.
Если тип T поддерживается QVariant, эта функция ведет себя точно так же, как toString (), toInt () и т. Д.
В зависимости от вашего варианта использования вы либо перестраиваете карту за один раз, либо конвертируете ее в предпочитаемый вами тип на ходу. В любом случае, вы бы использовали этот механизм, как показано в приведенном выше примере:
QVariant myVariant;
...
QDBusVariant dbusVariant;
if (myVariant.canConvert<QDBusVariant>())
dbusVariant = myVariant.value<QDBusVariant>();
Вы также можете пойти как QDBusVariant пример показывает:
// retrieve the D-Bus variant
QDBusVariant dbusVariant = qvariant_cast<QDBusVariant>(v);
Если вы хотите конвертировать QMap
затем
QMap<QString,QVariant> variantMap(initializeVariantMapFunction());
QMap<QString,QDBusVariant> dbusVariantMap;
QMap<QString,QVariant>::const_iterator it;
for (it = variantMap.constBegin() ; it != variantMap.constEnd() ; ++it)
dbusVariantMap.insert(it.key(), qvariant_cast<QDBusVariant>(it.value()));
Но вы могли бы, конечно, оставить variantMap
как есть, и при доступе к значению сделать
QDBusVariant someDBusVariant = qvariant_cast<QDBusVariant>(variantMap.value(key));
Ты можешь использовать QVariant :: canConvert чтобы проверить, если преобразование, если это возможно.