我們目前從Qt的4.5.x遷移到4.7.3,從那以後,我們得到的錯誤嘗試過的DBus(「浮動」未註冊爲的DBus型)發送彩車時。發送浮在QDBus
例如:
QVariantList getTemperatures()
{
QVariantList retVal;
retVal << getSensorValue(1) << getSensorValue(2);
return retVal;
}
getSensorValue
是一個返回float
值的方法。
由於4.6版本之前版本中的QVariant只能包含double
值,因此返回值隱式轉換爲double
,並且可以沿着DBus發送double
。 但是,從版本4,6開始,一個QVariant可以包含一個float
;因此,DBus模塊抱怨floats
不是已知的數據類型 - 這是正確的。
我試圖註冊float
數據類型,並實現流媒體運營商:
qDBusRegisterMetaType<float>();
QDBusArgument &operator<<(QDBusArgument &argument, const float &myFloat)
{
return argument << static_cast<double>(myFloat);
}
const QDBusArgument &operator>>(const QDBusArgument &argument, float &myFloat)
{
double d;
argument >> d;
myFloat = static_cast<float>(d);
return argument
}
但是,當我嘗試流的double
到QDBusArgument
(operator <<
),我得到一個錯誤的float
數據類型正試圖覆蓋double
行爲。
這也是正常的,因爲底層的QDbus系統已經將數據類型('f'
)流式傳輸到QDBusArgument
,然後檢測到double
正在進入流。
現在我的問題:沒有任何人知道我怎麼會流這個float
,而不必在後端方法doubles
全部更換float
數據類型?
這是對我來說是可以接受的解決方案。謝謝。 –