我们目前从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
数据类型?
这是对我来说是可以接受的解决方案。谢谢。 –