草庐IT

qDatastream

全部标签

c++ - qDatastream中的Qt二进制读取错误

我正在读取一个由传感器生成的二进制文件。我在读取不同精度(32或64)的float时遇到问题。我可以在MATLAB(64位版本)中阅读它们,但Qt(Windows上的32位版本)给出了错误的值。我可以读到dtmth(请引用下面的结构)。之后,我得到了baseline的值Inf。这个值实际上是0。如您所见,我更改了MSB(LittleEndian)。如果我保留BigEndian,我会得到0作为基线,但其他值是错误的。我的桌面是64位的。我检查了字节数,它们是正确的。我认为问题是机器精度。QDataStreamin(&file);in.setByteOrder(QDataStream::L

c++ - 如何简单地序列化复杂结构并在 Qt 中通过网络发送它们

我正在创建一个客户端服务器应用程序,现在我正在处理一种最简单的方法来序列化一些类,交付给另一端,然后放回我以后可以使用的类。我意识到这并不简单,有些人可能会说用C或C++等低级语言是不可能的,但实际上可以通过大量编码实现。我想知道是否其他人已经没有为此创建一个解决方案,它是可移植的并且可以工作,所以我不需要重新发明轮子。目前我的解决方案(可能有点太复杂):每个要序列化和反序列化的类都继承自抽象类Serializable,它包含两个函数:QHashToHash();voidLoadHash(QHashhash);第一个函数创建一个包含所有公共(public)和私有(private)变量的

c++ - 使用 QDataStream 读/写原始数据

我对QDataStream和Socket编程还很陌生,我想做的是简单地从客户端向主机发送一个quint32header值(四个字节)。但是我在使用QDataStream时遇到了一些问题。QByteArraydata;QDataStreamds(&data,QIODevice::ReadWrite);inta=htonl(32);char*head=(char*)&a;for(inti=0;i在这里,输出是“100100100120”,这是我想要的。然后我尝试将它写入数据流。ds.writeRawData(head,4);char*buffer=newchar[4];ds.readRaw

c++ - 使用 QDataStream 的 Qt 序列化 bool 值

我在尝试序列化我的自定义类时遇到错误。我正在使用QDataStream运算符>来写入和读取我的对象。当我尝试写入或读取bool值时发生错误:error:ambiguousoverloadfor'operatorQDataStream&operatorQDataStream&operator>>(QDataStream&in,sys_settings&Value){in>>Value.myBool;in>>Value.someStringreturnin;} 最佳答案 您很可能没有包含相关标题。如果不包含QDataStream,我可以

c++ - 在 Qt 拖放中使用 QMimeData 传递数据

我试图了解在Qt中使用拖放时数据是如何传递的。根据我从我一直在研究的示例中了解到的情况,您首先通过覆盖通过QWidget继承的方法将小部件定义为可拖动的。.在重写方法的实现中,我一直在查看的示例实例化了一个指向QMimeData的指针。对象,并通过调用setText(const QString &text)在其中存储信息和setData(const QByteArray &data).他们将信息存储在QByteArray中带有的对象运算符(operator):QByteArrayitemData;QDataStreamdataStream(&itemData,QIODevice::Wr

c++ - 为用户定义类型重载 QDataStream << 和 >> 运算符

我有一个对象,我希望能够从QDataStream读取和写入。标题如下:classCompound{public:Compound(QString,QPixmap*,Ui::MainWindow*);voidsaveCurrentInfo();voidrestoreSavedInfo(QGraphicsScene*);voidsetImage(QPixmap*);QStringgetName();private:QStringname,homeNotes,addNotes,expText;Ui::MainWindow*gui;QPixmap*image;structNMRdata{QSt

c++ - 是否可以确定枚举是否为强类型?

C++11为我们如何处理枚举引入了两个不同的补充:一个使它们具有作用域的选项,一个使它们有类型的选项。所以现在我们有四种不同的枚举子类型:enumOld{};enumTyped:int8_t{};enumclassScoped{};enumclassTypedScoped:int8_t{};Thisquestion询问如何确定枚举是否有范围。我想知道如何判断枚举是否有类型。附加信息我使用Qt框架,它提供了QDataStream类,用于以可移植的跨平台方式序列化/反序列化数据。显然,为了使生成的数据流可移植,您必须以固定长度的形式存储所有整数。这也包括枚举。过去,我制作了几个辅助宏来定义

c++ - 向 QSettings 编写和读取自定义类

我需要通过QSettings在注册表中存储自定义类的实例。在阅读了Qt的文档后,我想我已经实现了所需的功能,但我没有设法保存任何东西。这是我的自定义类:classSRSDefinition{public:SRSDefinition(QStringname,QStringdefinition):qsName(name),qsDefinition(definition){qRegisterMetaType("SRSDefinition");qRegisterMetaTypeStreamOperators("SRSDefinition");}SRSDefinition(constSRSDef

c++ - 向 QSettings 编写和读取自定义类

我需要通过QSettings在注册表中存储自定义类的实例。在阅读了Qt的文档后,我想我已经实现了所需的功能,但我没有设法保存任何东西。这是我的自定义类:classSRSDefinition{public:SRSDefinition(QStringname,QStringdefinition):qsName(name),qsDefinition(definition){qRegisterMetaType("SRSDefinition");qRegisterMetaTypeStreamOperators("SRSDefinition");}SRSDefinition(constSRSDef

c++ - 在 Qt 中序列化我的自定义类

我使用Reading/writingQObjects是真的吗?我用它序列化一个类,但是反序列化它不是原始类!我能做什么?这是我的基类头文件:classBase:publicQObject{Q_OBJECTpublic:explicitBase(QObject*parent=0);};QDataStream&operator>(QDataStream&ds,Base&obj);而.cpp是:Base::Base(QObject*parent):QObject(parent){}QDataStream&operatorpropertyCount();++i){if(obj.metaObje
12