我正在寻找从void * datalong data_size在C ++ Qt5.6中创建QBuffer的最简单或最优雅的方法。

我尝试将void强制转换为char指针,并使用QByteArray::fromRawData()以及使用QDataStream填充QByteArray。在两种情况下我都没有成功。

最佳答案

QByteArray::QByteArray(const char *data, int size)将复制数据。

QByteArray::fromRawData(const char *data, int size)将使用已经存在的数据。

根据您的实现,不复制数据最终可能会出现问题。

将数据存储在字节数组中之后,有几种处理方法,您可以直接构造一个缓冲区:

QBuffer(QByteArray *byteArray, QObject *parent = Q_NULLPTR)


或更可能的是,由于您正在播放音频,因此您可能想重新使用相同的缓冲区并使用以下方法之一重新填充它:

setBuffer(QByteArray *byteArray)
setData(const QByteArray &data)


最后,还有void QBuffer::setData(const char *data, int size),您甚至根本不需要字节数组步骤。

最后,请记住QBuffer是IO设备-需要打开它才能使其正常工作。快速测试表明它可以正常工作:

char data[] = {1, 2, 3};
void * vdata = data;
QBuffer buffer;
buffer.setData((char *)vdata, sizeof(data));
buffer.open(QIODevice::ReadOnly);
qDebug() << buffer.readAll(); // outputs "\x01\x02\x03"

关于c++ - 来自空指针和内存大小的QBuffer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36284233/

10-09 13:41