qt – 在QDBus上发送浮动
我们目前从Qt 4.5.x迁移到4.7.3,从那时起我们在尝试通过DBus发送浮动时遇到错误(‘float’未注册为DBus类型).
例如: QVariantList getTemperatures() { QVariantList retVal; retVal << getSensorValue(1) << getSensorValue(2); return retVal; } getSensorValue是一个返回floatvalue的方法. 我尝试注册float数据类型,并实现流操作符: 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 } 但是,当我尝试将double流式传输到QDBusArgument(operator<<)时,我得到一个错误,即float数据类型试图覆盖双重行为. 现在我的问题是:有没有人知道如何流式传输这个浮点数,而不必在后端方法中用双精度替换所有浮点型数据类型? 解决方法
(我最初创建了一个答案,我建议你使用beginStructure()和endStructure()以使QtDBus停止抱怨,但后来我意识到它并没有解决你的问题:你可能不想通过你的浮动为“结构中的双重”,但只是一个双重.)
当直接将浮点数传递给QDBusArgument时,它会自动转换为double,并且没有问题.但是如果你想通过QVariantList传递它,除了在将它放入QVariantList之前,你别无选择. 但是,如果你不害怕脏解决方案,你可以重载QVariantList的插入操作符让它为你做: // g++ -o main main.cpp -lQtCore -lQtDBus #include <QtDBus/QDBusArgument> QVariantList & operator<<(QVariantList & list,const float & f) { QVariant variant(static_cast<double>(f)); list << variant; return list; } int main() { QDBusArgument test; QVariantList list; float f = 1.0; list << f; test << list; // doesn't trigger any error return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |