精华内容
下载资源
问答
  • Qt序列化和反序列化

    千次阅读 2019-05-15 15:10:42
    反序列化 序列化Qt中实现对象序列化的类是QDataStream,写二进制到流中 QFile file("file.dat"); //创建一个文档 file.open(QIODevice::WriteOnly);//打开并只写 QDataStream out(&file); //序列...

    定义:

    对象转换为二进制——>序列化
    二进制转换为对象——>反序列化

    序列化:

    Qt中实现对象序列化的类是QDataStream,写二进制到流中

    QFile file("file.dat");         //创建一个文档
    file.open(QIODevice::WriteOnly);//打开并只写
    QDataStream out(&file);         //序列化文档
    out << QString("the answer is");//将字符串写入文档中,实际在该文档中为二进制
    out << (qint32)42;
    

    反序列化:

    从流中读入二进制

    QFile file("file.dat");
    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);    // read the data serialized from the file
    QString str;
    qint32 a;
    in >> str >> a; 
    
    • 提醒:当Qt的Qdatastream 满足不了定义的数据对象的序列化和反序列化时
      需要对已有的数据对象进行<<和>>的重载函数实现。
    展开全文
  • Google Protobuf基于Qt开发序列化反序列化用QUdpSocket传输并显示。实例。 具体可查看了解:https://blog.csdn.net/automoblie0/article/details/101363526
  • 反序列化 序列化Qt中实现对象序列化的类是QDataStream,写二进制到流中 QFile fileout("file.dat"); //创建一个文档 fileout.open(QIODevice::WriteOnly | QIODevice::Text);//打开并只写 QDataSt...

    定义:

    对象转换为二进制——>序列化
    二进制转换为对象——>反序列化

    序列化:

    Qt中实现对象序列化的类是QDataStream,写二进制到流中

    QFile fileout("file.dat");         //创建一个文档
    fileout.open(QIODevice::WriteOnly | QIODevice::Text);//打开并只写
    QDataStream out(&fileout);         //序列化文档
        
    QString outstr("this out string");
    out<<outstr;
    fileout.close();

    反序列化:

    从流中读入二进制

    QFile filein("file.dat");
    filein.open(QIODevice::ReadOnly | QIODevice::Text);
    QDataStream in(&filein);
    
    QString instr("this out string");
    in>>instr;
    filein.close();

    使用自定义的类来实现序列化

    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    
    
        friend QDataStream &operator<<(QDataStream &output, const QWidget &w);
        friend QDataStream &operator>>(QDataStream &input,        QWidget &w);
    
    private:
        Ui::Widget *ui;
    };
    
    QDataStream &operator<<(QDataStream &output, const QWidget &w)
    {
        output<<2;
        return output;
    }
    
    QDataStream &operator>>(QDataStream &input,       QWidget &w)
    {
        int n = 0;
        input>>n;
        qDebug()<<n;
        return input;
    }

    使用方法

        Widget w;//自定义的类
    
        QFile fileout("file.dat");
        fileout.open(QIODevice::WriteOnly | QIODevice::Text);
        QDataStream out(&fileout);
        out << w;
        fileout.close();
    
        QFile filein("file.dat");
        filein.open(QIODevice::ReadOnly | QIODevice::Text);
        QDataStream in(&filein);
        in>>w;
        filein.close();

     

     

     

     

     

     

     

     

     

    展开全文
  • Qt下实现序列化反序列化

    千次阅读 2018-12-18 14:22:31
    写了一个工具类MyDatastream,使用时需要实例化对象,调用相应的序列化反序列化函数即可,读者可以根据自己定制的结构体自行扩展。例子中的结构体如下: struct UserInfo { unsigned char id[20]; int idint; ...

    简述

    本文介绍作者在Qt工程中如何将流数据编程结构体对象,把结构体数据编程流数据的实现。代码量不大,非常简洁。

    代码之路

    写了一个工具类MyDatastream,使用时需要实例化对象,调用相应的序列化或反序列化函数即可,读者可以根据自己定制的结构体自行扩展。例子中的结构体如下:

    struct UserInfo
    {
      unsigned char id[20];
      int idint;
      unsigned char ip[16];
    };
    

    工具类的头文件mydatastream.h

    // #include <QDebug>
    #include "paraglobe.h" //就是放UserInfo结构体用
    class MyDatastream
    {
      public:
        MyDatastream();
        UserInfo readStruct(QByteArray ba);  //反序列化函数
        QByteArray writeStruct(UserInfo ss); //序列化函数
    };
    

    工具类的cpp文件mydatastream.cpp

    #include "mydatastream.h"
    MyDatastream::MyDatastream()
    {
    }
    UserInfo MyDatastream::readStruct(QByteArray ba)
    {
      UserInfo *test = (UserInfo*)ba.data();
      return *test;
    }
    QByteArray MyDatastream::writeStruct(UserInfo ss)
    {
      QByteArray ba;
      ba.resize(sizeof(UserInfo));
      memset(ba.data(), 0, sizeof(UserInfo));
      memcpy(ba.data(), &ss, sizeof(UserInfo));
      return ba;
    }
    

    写在最后

    代码在ubuntu16.04版本的Qt5.8下测试通过,转化正确。不足的地方有两点。一是代码可以用引用的方式提高内存使用率和处理效率;二是每次有新的结构体还需要再写一对新的函数。

    展开全文
  • C++ protobuf在QT中的序列化和反序列化

    千次阅读 2018-12-05 11:40:40
    序列化 //自己定义的protobuf数据类型 ... QByteArray msgBytes = QByteArray(msg.ByteSize(),0); //序列化 msg.SerializeToArray(msgBytes.data(), msg....反序列化 //udp获取的数据 QByteArray recvData = m_pR...
    1. 序列化
     //自己定义的protobuf数据类型
     NET_MSG msg;
    QByteArray msgBytes = QByteArray(msg.ByteSize(),0);
    //序列化
    msg.SerializeToArray(msgBytes.data(), msg.ByteSize());
    
    1. 反序列化
    //udp获取的数据
     QByteArray recvData = m_pRemoteSocket->readAll();
     //自己定义的protobuf数据类型
     NET_MSG msg;
     //反序列化
     msg.ParseFromArray(recvData.data(), recvData.size());
    
    展开全文
  • I am programming a GUI with Qt library. In my GUI I have a huge std::map."MyType" is a class that has different kinds of fields.I want to serialize the std::map. How can I do that? Does Qt provides us...
  • 序列化以及反序列化的实现 struct Body { double weight; double height; }; //结构体 struct People { int age; Body dBody;//结构体 vector<QString> vecfamily;//vector //序列化 ...
  • 定义 序列化:将对象或数据结构转换为二...Qt序列化反序列化 Qt中使用QDataStream类实现对象序列化序列化: QFile file("file.rx"); //定义文件路径 file.open(QIODevice::WriteOnly); //以只写模式打开 Q
  • 1. 序列化反序列化目的 通常在程序运行过程中我们需要对一个对象当前的状态进行存储或者传输,在传递保存对象时,保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中,...
  • 可能就需要用到两种方式来解析传输数据,对应数据格式的字节位来解析,或者是采用数据序列化反序列化的方式来解析。个人比较倾向于后者的方式,毕竟以前做过Java或C#的项目。也觉得用这种方式比较方便省事。所以就...
  • JSON 是存储交换文本信息的语法。类似 XML。JSON 比 XML 更小、更快,更易解析。下面通过实例代码给大家分享Json序列化和反序列化通用的封装,需要的的朋友参考下吧
  • 功能:Qt序列化与发序列化的实现(QDataStream) 用途:UI界面自定义数据结构的保存于读取 ```cpp struct Body { double weight; double height; }; //结构体 struct People { int age; Body dBody;//结构体 ...
  • How can I know the size of qt data types in bytes; including QString objects if these data types were written on some QFile. I have to implement sizeOf() function in the Student class as below; someth...
  • 上一教程对proto文件的语法进行了详细说明,本教程将对google protocol buffer数据序列化和反序列化进行举例说明。 下面先以最简单的数据结构为例: 第一步,新建项目,选择Qt Console Application 第二步,...
  • Qt序列化数据

    2020-08-15 18:25:46
    可以利用QDataStream来序列化以及反序列化数据。方便我们进行数据传输。 Qt提供的QDataStream可以序列化一些数据,如下: bool, float, double, const char * qint8, qint16, qint32, qint64, quint8, quint16, ...
  • Qt中提供了QDataStream类用于读写二进制文件,所以可以借助此类实现序列化和反序列化。 2.1、定义数据结构 #ifndef DATA_RECORD_H #define DATA_RECORD_H #include <QObject> #include &l
  • Qt 序列化按钮

    2020-10-29 14:51:22
    通过序列化按钮,可以极大减少代码量。 通过QList容器存放12个按钮 //序列化通道按钮 QList<QPushButton*> pushButtonList; pushButtonList = pushButtonList << ui->target1_pushButton <&...
  • Qt 序列化操作

    千次阅读 2015-09-10 10:13:43
    还有一类特殊的就是我们自己定义的数据结构或类,这种方式利用QDataStream不能直接实现序列化,我们必须重载>>操作符,只有重载完之后才可以按我们的要求实现序列化。下面就举例来说明一下,我们自定义的数据结构...
  • #include <QCoreApplication> #include <QJsonDocument> #include <QString> #include <QDebug> #include <QJsonObject> #include <QJsonValue> #include <...s
  • Qt序列化

    2019-05-03 15:42:53
    转载:http://www.cnblogs.com/findumars/p/6568869.html
  • protobuf常用序列化和反序列化API,相关教程:http://blog.csdn.net/tennysonsky/article/details/73920767
  • C#中序列化和反序列化 一、概述 C#中序列化器有四种分别为:二进制序列化,SOAP序列化,XML序列化和JSON序列化 其中二进制序列化体积最小,然后是JSON,再是XML,SOAP体积最大,与之相反,依次保留信息的能力依次变...
  • QT序列化与网络传输

    2020-11-22 21:53:15
    介绍QT序列化与网络传输之间的关系!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,321
精华内容 4,528
关键字:

qt序列化和反序列化