代码之家  ›  专栏  ›  技术社区  ›  Jay

qt+protobuf,类型?

  •  14
  • Jay  · 技术社区  · 15 年前

    我想在Qt开发中使用Google的协议缓冲区,但是我很难找到如何最好地将它们结合起来。

    最后,我想 QUdpSocket 和 QTcpSocket 使用协议缓冲区。

    在协议缓冲区之间切换的最佳方法是什么 message 通过套接字发送数据( QByteArray )然后又回到另一边?

    4 回复  |  直到 10 年前
        1
  •  12
  •   thomie    15 年前

    QByteArray

    Person person; // a protobuf object
    person.set_id(123);
    person.set_name("Bob");
    person.set_email("bob@example.com");
    
    std::ostringstream out;
    person.SerializeToOstream(&out);
    QByteArray byteArray(out.str().c_str());
    sendSerializedPersonOverQTcpSocket(byteArray);
    

    QByteArray byteArray = readSerializedPersonFromQTcpSocket();
    Person person;
    if (!person.ParseFromArray(byteArray, byteArray.size())) {
      std::cerr << "Failed to parse person.pb." << std::endl;
    }
    
        2
  •  6
  •   matemaciek    15 年前

    std::ostringstream out;
    person.SerializeToOstream(&out);
    QByteArray byteArray(out.str().c_str());
    

    QByteArray byteArray(person.SerializeAsString().c_str());
    

    QByteArray byteArray(QString::fromStdString(person.SerializeAsString()));
    

    QByteArray byteArray(person.SerializeAsString().c_str(), person.ByteSize());
    
        3
  •  4
  •   Community Mohan Dere    9 年前

    std::ostringstream out;
    person.SerializeToOstream(&out);
    QByteArray byteArray(out.str().c_str());
    sendSerializedPersonOverQTcpSocket(byteArray);
    

    In protobuf-c, can optional uint32 variable have value 0

    QByteArray byteArray;
    byteArray.resize(message.ByteSize());
    message.SerializeToArray(byteArray.data(), byteArray.size());
    
        4
  •  3
  •   Viren    15 年前

    ParseFromArray()

    void convertQByteArrayToUser(QByteArray& aByteArray)
    {
        com::your::name_space::User user;
        if(!user.ParseFromArray(aByteArray.data(), aByteArray.size())) 
        {
            //could not parse
        }
        else { //yayyyyy            
            if(user.has_userid())
            {
                //...
            }
        }
    }