Obecnie migrowaliśmy z Qt 4.5.x do 4.7.3, i od tego czasu otrzymujemy błędy przy próbie wysłania wartości pływających przez DBus ("float" niezarejestrowany jako typ DBus).Wysyłanie zmiennoprzecinkowe nad QDBus
na przykład:
QVariantList getTemperatures()
{
QVariantList retVal;
retVal << getSensorValue(1) << getSensorValue(2);
return retVal;
}
getSensorValue
jest metodą, która zwraca wartość float
.
Ponieważ wersja QVariant w wersji wcześniejszej niż 4.6 mogła zawierać tylko wartość double
, wartości zwracane były domyślnie rzutowane na double
, a double
może być wysyłane wzdłuż DBus. Ale od wersji 4,6 QVariant może zawierać float
; w rezultacie moduł DBus narzeka, że floats
nie jest znanym typem danych - co jest poprawne.
próbowałem zarejestrować float
typ danych, a do realizacji operatorom Streaming:
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
}
Ale gdy próbuję przesyłać strumieniowo double
do QDBusArgument
(operator <<
), pojawia się błąd, że float
typ danych próbuje zastąpić zachowanie double
.
Jest to również normalne, ponieważ podstawowy system QDbus przekazał już typ danych ('f'
) do QDBusArgument
, a następnie wykrywa, że double
wchodzi do strumienia.
A teraz moje pytanie: czy ktoś wie, w jaki sposób mogę przesyłać strumieniowo ten float
, bez konieczności wymiany wszystkich typów float
z doubles
w metodach backendu?
Jest to akceptowalne rozwiązanie dla mnie. Dzięki. –