2014-12-19 2 views
1

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

+0

может быть просто 'qvariant_cast (map.value (ключ))' для каждого значения 'QMap ' при обращении к нему? –

+0

Он наследует его, поэтому я уверен, что актер будет работать. –

ответ

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); 
0

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

Смежные вопросы