【发布时间】:2011-11-05 00:13:03
【问题描述】:
我们目前从 Qt 4.5.x 迁移到 4.7.3,从那时起我们在尝试通过 DBus 发送浮点数时遇到错误('float' 未注册为 DBus 类型)。
例如:
QVariantList getTemperatures()
{
QVariantList retVal;
retVal << getSensorValue(1) << getSensorValue(2);
return retVal;
}
getSensorValue是一个返回float值的方法。
由于 4.6 之前的版本中的 QVariant 只能包含 double 值,因此返回值被隐式转换为 double,并且 double 可以沿着 DBus 发送。
但是,从版本 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 数据类型?
【问题讨论】:
标签: qt embedded-linux dbus