Свойство Qt DBus конвертировать в карту

Мне нужно получить свойство интерфейса DBus, поэтому я сделал interface.property(name), Это возвращает QVariant, но карта, которую может вернуть QVariant, QMap<QString, QVariant>тогда как мне нужно QMap<QString, QDBusVariant>, Что я должен делать?

1

Решение

Я думаю, что вы ищете этот метод, так как нет QVariant::toQDBusVariant() метод, по своей сути и по праву:

T QVariant :: value () const

Возвращает сохраненное значение, преобразованное в тип шаблона 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);
1

Другие решения

Если вы хотите конвертировать 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 чтобы проверить, если преобразование, если это возможно.

0

По вопросам рекламы [email protected]