我在QT 5.7中的DBUS有问题。
我收到一个变体,并且在该变体内部我知道有一个QVariantMap
(即,如果QMap
由QVariant
索引,则为strings
)。
我在消息中收到的是QVariant
对象。我知道里面有一个QDBusArgument(调试器说的是,请参见附件图像),但是我不知道什么是提取它的正确方法,也不知道QVariantMap。
至于现在,我所做的是
QDBusArgument *darg = static_cast<QDBusArgument*>((void *)vm.data());
QVariantMap elems;
*darg >> elems;
但我不确定这种方法,也不喜欢静态转换。有没有其他选择?
最好的祝福
编辑:
发表评论后,我能够编写一个“更精细”的版本,qith
qdbus_cast
:QVariantMap elems = qdbus_cast<QVariantMap>(*(static_cast<QDBusArgument*>((void *)vm.data())));
但是,这没有回答我的问题,因为最重要的部分是关于
static_cast
(以及是否有避免的方法,因为它是不安全的)。 最佳答案
QVariant类为此提供了一种方法,请参见toMap()。
正如文档所述,另请参见canConvert()和convert()。