Hiện tại chúng tôi đã di chuyển từ Qt 4.5.x sang 4.7.3 và kể từ đó chúng tôi gặp lỗi khi cố gắng gửi nổi trên DBus ('float' không được đăng ký dưới dạng DBus type).Gửi nổi trên QDBus
Ví dụ:
QVariantList getTemperatures()
{
QVariantList retVal;
retVal << getSensorValue(1) << getSensorValue(2);
return retVal;
}
getSensorValue
là một phương thức trả về một giá trị float
.
Vì phiên bản QVariant trong phiên bản trước phiên bản 4.6 chỉ có thể chứa giá trị double
, giá trị trả lại được chuyển hoàn toàn đến double
và có thể gửi double
cùng với DBus. Nhưng, kể từ phiên bản 4.6, QVariant có thể chứa float
; kết quả là, mô-đun DBus phàn nàn rằng floats
không phải là một kiểu dữ liệu đã biết - đó là chính xác.
Tôi cố gắng để đăng ký float
datatype, và để thực hiện các nhà khai thác trực tiếp:
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
}
Tuy nhiên, khi tôi cố gắng để dòng double
vào QDBusArgument
(operator <<
), tôi nhận được một lỗi rằng float
datatype đang cố gắng ghi đè hành vi double
.
Điều này cũng bình thường, bởi vì hệ thống QDbus cơ bản đã phát trực tuyến kiểu dữ liệu ('f'
) đến QDBusArgument
và sau đó phát hiện rằng double
đang nhập luồng.
Và bây giờ câu hỏi của tôi: Có ai biết làm thế nào tôi có thể dòng này float
, mà không cần phải thay thế tất cả float
kiểu dữ liệu với doubles
trong các phương pháp phụ trợ?
Đây là một giải pháp có thể chấp nhận đối với tôi. Cảm ơn. –