• 6938阅读
  • 5回复

如何用qt的tcpsocket传输一个我自定义的struct [复制链接]

上一主题 下一主题
离线tsuibin
 

只看楼主 倒序阅读 楼主  发表于: 2010-10-29
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我的结构体

类似这样
typedef struct _IplImage
{
...........
    struct _IplTileInfo *tileInfo;  /* "           " */
    int  imageSize;         /* Image data size in bytes
                               (==image->height*image->widthStep
                               in case of interleaved data)*/
    char *imageData;        /* Pointer to aligned image data.         */
    int  widthStep;         /* Size of aligned image row in bytes.    */
    int  BorderMode[4];     /* Ignored by OpenCV.                     */
    int  BorderConst[4];    /* Ditto.                                 */
    char *imageDataOrigin;  /* Pointer to very origin of image data
                               (not necessarily aligned) -
                               needed for correct deallocation */
.............
}
IplImage;


发送函数
我实验了几种
QTextStream 不支持自定义的结构体类型
然后我实验write
用char *的方式传输
也不行

m_clientTcpSocket的类型是 QTcpSocket

void VideoServer::sendData(IplImage image)
{
    if (!client_flag ) createClient();
   // QTextStream out(m_clientTcpSocket);

    //out << image << endl;
    m_clientTcpSocket->write((const char *)&image,sizeof(IplImage));
}


qt有什么好的方法吗?
离线lejcey

只看该作者 1楼 发表于: 2010-10-30
自己重载 << 和 >>,给你写一个简单的例子

  1. struct myData{
  2. int id;
  3. char *data;
  4. };
  5. QDataStream &operator<<(QDataStream &out, const myData &data){
  6.     out << MAGIC_CHAR; // 识别类型
  7.     out << DataType::B_INT; // 识别数据类型
  8.     out << data.id;
  9.     out << DataTpye::B_CHAR;
  10.     out.writeRawData(data.data, strlen(data.data));
  11.     return out;
  12. }
  13. QDataStream &operator>>(QDataStream &in, myData &data){
  14.     int i;
  15.     in >> i;
  16.     if (i != MAGIC_CHAR){ 
  17.         data.id = -1; 
  18.         data.data = "ERROR Data"; 
  19.         in.device()->seek(in.device()->pos() - sizeof(MAGIC_CHAR));
  20.     }
  21. return in;
  22. }
  23. .....
  24. return in;
  25. }


只是给你个思路,代码自己写。
[ 此帖被lejcey在2010-10-30 11:22重新编辑 ]
离线tsuibin

只看该作者 2楼 发表于: 2010-11-05
回 1楼(lejcey) 的帖子
非常感谢lejcey
只是我要传送的那个类型太复杂了
结构体里面有结构体指针 指向的结构体里面还有指针 只想的数据类型是另一个结构体
如果要重载
那代码量......
我正在想其他办法解决这个问题
离线hehui

只看该作者 3楼 发表于: 2010-11-09
就是楼上的楼上的方法!
离线jackliu8722
只看该作者 4楼 发表于: 2011-01-11
学习了
离线小鸟一只
只看该作者 5楼 发表于: 2013-01-08
楼主有没有想出来
快速回复
限100 字节
 
上一个 下一个