我正在使用 Qt5,我正在尝试通过 QUdpProtocol 在 QDataStream 中使用 QByteArray 数据包发送 QPixmap。发送像素图很简单(并且正确?):
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";
但是阅读...没有任何 react -我的意思是,没有填写 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。什么都没有。 两个程序显示相同的字节数(发送和接收)。如果这很重要,我将两个套接字绑定(bind)在
QHostAddress::LocalHost
使用相同的端口,但原始文本已成功发送。我做错了什么?
最佳答案
嗯,成功了。
来自互联网的代码是无效 .我试过这样:
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 传输也可以正常工作(如果遇到问题,请记住最大数据包大小)。
关于c++ - QPixmap over QUdpSocket - 无法读取正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672307/