我有一个结构
struct control_data{
int column_number;
QString cell;
};
我需要在QShareMemory的帮助下将其发送到另一个线程。我read你不能这样做,因为QString包含指针。还有其他方法吗?
答案 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();