我在QT 5.7中遇到了DBUS問題。QVariant到QDBusArgument
我收到一個變體,在該變體中,我知道有一個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
(如果有一種方法可以避免它,因爲它是不安全的)。
已經嘗試過。正如文檔所說,toMap方法的工作原理是「如果變體具有type()QMetaType :: QVariantMap」。這個QVariant有一個類型id 1024(即用戶類型,因爲我是一個QDBusArgument),所以我不能用這個方法提取它(實際上,它返回一個空映射)。使用convert函數(如果我是對的)將一種類型轉換爲另一種類型,但我不能提取它.. – frarugi87
我沒有得到你的意思,我收到一個變體,並且在這個變體中我知道那麼就有一個QVariantMap'。它是怎麼來的,它有用戶類型? – arrowd
對不起,該帖子的其餘部分應該更好地解釋它。正如我後來寫的那樣,'QVariant'是一個'QDbusArgument',而INSIDE裏有'QVariantMap'。這就是爲什麼我必須將內部數據轉換爲'QDBusArgument',然後提取地圖。函數'toMap'意味着'QVariant'是'QVariantMap'' – frarugi87