QPixmap over QUdpSocket - 无法读取正确的数据

时间:2014-09-04 18:10:20

标签: c++ qt sockets

我正在使用Qt5,我试图在QDataStream中使用QByteArray数据包通过QUdpProtocol发送QPixmap。发送pixmap很简单(并且正确吗?):

QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);

out.setVersion(QDataStream::Qt_5_0);
out << (quint32)0;
out << pixmap;
out.device()->seek(0);
out << (quint32)(block.size() - sizeof(quint32));

socket->write(block);
qDebug() << "Block size:" << (float)(block.size()/1024.f) << "KB";

但阅读......没有任何反应 - 我的意思是,QLabel没有填写,任何更改,任何错误信息。

QByteArray buffer;
buffer.resize(sock->pendingDatagramSize());
sock->readDatagram(buffer.data(), buffer.size(), &remoteAddr, &remotePort);

if (sock->bytesAvailable() > 0)
    return;

QDataStream out(&buffer, QIODevice::ReadOnly);
out.setVersion(QDataStream::Qt_5_0);

QPixmap p;
//out.device()->seek(0);
out >> p;
ui->label->setPixmap(p);

我知道UDP中的数据包碎片,但我尝试发送50像素,20,10,5,最后 - 1.没有。 两个程序显示相同的字节数(已发送和已接收)。如果这很重要,我将QHostAddress::LocalHost的两个套接字绑定到相同的端口,但原始文本已成功发送。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

嗯,成功。
来自互联网的代码无效。我试过这种方式:

QByteArray frame;

QDataStream out(&frame, QIODevice::WriteOnly);
out << myPixmap;

QDataStream in(&frame, QIODevice::ReadOnly);
QPixmap pix2;
in >> pix2;
ui->label->setPixmap(pix2);

它很有效,很容易。

在Qt5上,不需要启动大小的字节。此外,通过TCP / UDP传输工作正常(如果您遇到麻烦,请记住最大数据包大小)。