Actualmente migramos de Qt 4.5.x a 4.7.3, y desde entonces obtenemos errores cuando intentamos enviar flotantes a través de DBus ('float' no registrado como tipo DBus).Enviando float sobre QDBus
Por ejemplo:
QVariantList getTemperatures()
{
QVariantList retVal;
retVal << getSensorValue(1) << getSensorValue(2);
return retVal;
}
getSensorValue
es un método que devuelve un valor float
.
Dado que un QVariant en la versión anterior a 4.6 solo podía contener un valor double
, los valores devueltos se convertían implícitamente en double
, y se puede enviar un double
a lo largo del DBus. Pero, desde la versión 4,6, un QVariant puede contener un float
; como resultado, el módulo DBus se queja de que floats
no es un tipo de datos conocido, que es correcto.
Me trataron de registrar el tipo de datos float
, y para poner en práctica los operadores de transmisión:
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
}
Pero, cuando trato de transmitir los double
en el QDBusArgument
(operator <<
), me sale un error que el float
tipo de datos está intentando anular el comportamiento double
.
Esto también es normal, porque el sistema QDbus subyacente ya ha transmitido el tipo de datos ('f'
) al QDBusArgument
, y luego detecta que un double
está ingresando a la transmisión.
Y ahora mi pregunta: ¿Alguien sabe cómo podría transmitir esta float
, sin tener que reemplazar todos los tipos de datos con float
doubles
en los métodos de back-end?
Esta es una solución aceptable para mí. Gracias. –