Şu anda Qt 4.5.x'ten 4.7.3'e geçiş yaptık ve o zamandan beri DBus üzerinde float göndermeye çalışırken ('float' DBus türü olarak kayıtlı değil) hatalar alıyoruz. ÖrneğinQDBus üzerinden gönderme gönderimi
:
QVariantList getTemperatures()
{
QVariantList retVal;
retVal << getSensorValue(1) << getSensorValue(2);
return retVal;
}
getSensorValue
bir float
değeri veren bir yöntemdir.
4.6'dan önceki bir sürümde bir QVariant yalnızca bir double
değeri içerebileceğinden, döndürme değerleri örtülü olarak bir double
ve bir double
DBus boyunca gönderilebilir. Ancak, sürüm 4,6'dan beri, bir QVariant bir float
; Sonuç olarak, DBus modülü floats
'un bilinen bir veri türü olmadığından şikayet eder - ki bu doğrudur.
float
veri türünü kayıt ve gerçek zamanlı aktarım operatörleri uygulamaya çalışmıştır:
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
}
Ama QDBusArgument
(operator <<
) içine double
akışı deneyin, bir hata alıyorum olduğunu float
veritipi double
davranışını geçersiz kılmaya çalışıyor.
Bu da normaldir çünkü altta yatan QDbus sistemi zaten veri tipini ('f'
) QDBusArgument
akışına aktarmış ve ardından bir double
akışa girmekte olduğunu algılar.
Ve şimdi sorum şu: bu float
akışını, arka uç yöntemlerinde ile tüm float
veri türlerini değiştirmek zorunda kalmadan nasıl aktarabilirim?
Bu benim için kabul edilebilir bir çözümdür. Teşekkürler. –