我需要得到一个 DBus 接口的属性,所以我做了interface.property(name)
. 这会返回一个 QVariant,但 QVariant 可以返回的地图只有QMap<QString, QVariant>
,而我需要QMap<QString, QDBusVariant>
。我应该怎么办?
问问题
651 次
2 回答
1
我认为您正在寻找这种方法,因为没有QVariant::toQDBusVariant()
方法,本质上和正确地:
返回转换为模板类型 T 的存储值。调用 canConvert() 以查看是否可以转换类型。如果无法转换该值,则将返回一个默认构造的值。
如果 QVariant 支持类型 T,则此函数的行为与 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);
于 2014-12-19T21:05:11.840 回答
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检查是否转换。
于 2014-12-19T21:10:51.530 回答