gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:05:12 30 4
gpt4 key购买 nike

我正在使用 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com