如何从任意类型的 QVariant 中获取原始二进制内容到 QBytearray 中?

How can I get the raw binary content from an arbitrary typed QVariant into a QBytearray?

问题

我有一个接口,可以为我提供任意类型的 QVariant。我需要将此变体中的数据内容转换为原始二进制 QByteArray:

QVariant result = myQVariantReturningMethod(type arg, type arg2);
QByteArray rawResult = ?;

背景

生成的 QByteArray 通过 Canbus 发送。根据其大小,它以多个 can 帧或单个 can 帧传输。用于发送帧的 can 总线接口将 QByteArray 作为输入。基于附加信息,can 帧的接收者知道如何解析传入的 can 帧流。

到目前为止我尝试了什么

我尝试了几种方法

我不关心 stl 方式还是 qt 方式是解决问题的可能方法。但是,它必须 c++11-compatible

事实证明,QVariant 有一个未记录的方法 constData(),它给出了我想要的结果:指向 QVariant 内部存储数据的指针。与 QMetaType::sizeOf() 一起,这正是将所有数据写入 QByteArray.

所需要的

我发现该方法记录在 Qt 6.0 的文档中,并且发现它也适用于我的 Qt 5.12.7,尽管相应的文档中没有描述。