Qt4: how to send QString inside a struct via QSharedMemory

1k views Asked by At

I have a struct

struct control_data{
    int column_number;
    QString cell;
};

I need to send it to another thread with the help of QShareMemory. I read that you can't do this because QString contains pointers inside. Any other ways?

1

There are 1 answers

3
Kirell On

You have to serialize your struct to a Byte array. You can always convert your QString to a const char* like this:

myString.toStdString().c_str();

But serializing a QString should work.

  • The first step is to serialize your struct to a QDatastream using Qt, example here.

  • Then once your struct can be read and written you can pass it to a shared memory.

A complete example of using QSharedMemory can be found here.

Here is the relevant code:

// 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();