Nous avons actuellement migré de Qt 4.5.x à 4.7.3, et depuis lors nous obtenons des erreurs lorsque nous essayons d'envoyer des flottants sur DBus ('float' n'est pas enregistré comme type DBus).Envoi flottant sur QDBus
Par exemple:
QVariantList getTemperatures()
{
QVariantList retVal;
retVal << getSensorValue(1) << getSensorValue(2);
return retVal;
}
getSensorValue
est une méthode qui retourne une valeur float
.
Puisqu'un QVariant dans la version antérieure à 4.6 ne pouvait contenir qu'une valeur double
, les valeurs de retour étaient implicitement transtypées en double
et un double
pouvait être envoyé le long de DBus. Mais, depuis la version 4.6, un QVariant peut contenir un float
; par conséquent, le module DBus se plaint que floats
ne sont pas un type de données connu - ce qui est correct.
J'ai essayé d'enregistrer le float
type de données, et de mettre en œuvre les opérateurs de diffusion en continu:
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
}
Mais, lorsque je tente de diffuser le double
dans le QDBusArgument
(operator <<
), je reçois une erreur que le float
type de données tente de contourner le comportement double
.
Ceci est également normal, car le système QDbus sous-jacent a déjà transmis le type de données ('f'
) au QDBusArgument
, puis détecte qu'un double
entre dans le flux.
Et maintenant ma question: Quelqu'un sait comment je pourrais diffuser ce float
, sans avoir à remplacer tous les float
avec doubles
dans datatypes les méthodes de back-end?
C'est une solution acceptable pour moi. Merci. –