Qt4:如何通过QSharedMemory在结构中发送QString

时间:2015-07-30 08:17:54

标签: struct qt4 qstring qsharedmemory

我有一个结构

struct control_data{
    int column_number;
    QString cell;
};

我需要在QShareMemory的帮助下将其发送到另一个线程。我read你不能这样做,因为QString包含指针。还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

您必须将结构序列化为Byte数组。您可以随时将QString转换为const char*,如下所示:

myString.toStdString().c_str();

但序列化QString应该可行。

  • 第一步是使用Qt example here将结构序列化为QDatastream

  • 然后,一旦您的结构可以被读取和写入,您就可以将其传递给共享内存。

可以找到使用QSharedMemory的完整示例here

以下是相关代码:

// First, test whether a shared memory segment is already attached to the process.
// If so, detach it
if (sharedMem.isAttached())
{
    sharedMem.detach();
}

...

QBuffer buffer;
buffer.open( QBuffer::ReadWrite );
QDataStream out( &buffer );
out << youStruct;
int size = buffer.size();  // size of int + size of QString in bytes

if ( !sharedMem.create( size ) ) {
    return;
}

// Write into the shared memory
sharedMem.lock();
char *to = (char*)sharedMem.data();
const char *from = buffer.data().data();
memcpy( to, from, qMin( sharedMem.size(), size ) );
sharedMem.unlock();