0

我有一个结构

struct control_data{
    int column_number;
    QString cell;
};

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

4

1 回答 1

0

您必须将结构序列化为 Byte 数组。您始终可以将您的转换QStringconst char*这样的:

myString.toStdString().c_str();

但是序列化 QString 应该可以。

  • 第一步是将您的结构序列化为QDatastream使用 Qt 的示例,此处为示例。

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

可以在此处找到使用 QSharedMemory 的完整示例。

以下是相关代码:

// 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();
于 2015-07-30T08:34:08.853 回答