【发布时间】:2018-02-19 09:23:03
【问题描述】:
我正在开发 C++ QT 项目,其中包含一些模块通过一个控制器模块使用带有签名的函数相互通信:
notify(QString stream_id, const void* stream, unsigned __int64 size)
所以我问的是如何将 QT 数据类型主要转换为 QImage* 到 void*,反之亦然,以使用 void 指针及其大小发送数据,
我正在尝试使用此代码,但它不起作用:
void* imageVoidPtr = static_cast<void*>(&image);
StreamListener::getInstance()->notify(QString("Stream_Name"),imageVoidPtr,sizeof(imageVoidPtr));
------------- 编辑
我正在尝试使用以下方法检索数据:
void VideoView::receive(QString stream_id, const void* stream, unsigned __int64 size){
QByteArray data = QByteArray::fromRawData(reinterpret_cast<const char*>(stream), size);
QBuffer buffer(&data);
QImageReader reader(&buffer);
QImage img = reader.read();}
-------- 编辑 2
Void* 缓冲区大小为 4 或 12 的代码有什么问题(在 sizeOf(QImage) 的情况下)并且没有给出正确大小的图像字节大小, 并且接收器中接收到的图像是空的(没有错误出现)。
谢谢
【问题讨论】:
-
它不工作?
-
您可能希望发送图像的内容而不是指向
QImage的指针,具体取决于您的框架,并取决于这是在发送进程内还是发送到另一个进程。看看QImage::bits()或QImage::constBits。 -
sizeof(imageVoidPtr)将简单地评估为void *的大小——不与QImage本身相关的任何内容。
标签: c++ qt pointers casting qimage