我在使用QSharedMemory存储一个QList数据时,发现创建成功了,但是另外一个进程去访问这片共享内存的时候,无法正常访问。贴出代码,请求了解的人解惑,是不是QSharedMemory只能存储char ,int这种类型的数据,对于容器甚至类就无法存储了。
shareload工程,创建共享内存
core.h
#ifndef _CORE_H
#define _CORE_H
#include <QWidget>
#include <QSharedMemory>
class ShareMemoryLoad:public QWidget
{
 Q_OBJECT
public:
 ShareMemoryLoad(QWidget *parent=0);
 ~ShareMemoryLoad();
private:
 QSharedMemory sharedMem;
 void loadIntoSharedMem();
};
#endif
 
core.cpp
#include "core.h"
#include <QList>
ShareMemoryLoad::ShareMemoryLoad(QWidget *parent):QWidget(parent),sharedMem("MemoryTest")
{
 loadIntoSharedMem();
}
ShareMemoryLoad::~ShareMemoryLoad()
{}
void ShareMemoryLoad::loadIntoSharedMem()
{ 
  if (sharedMem.create(5))
  {
   sharedMem.lock();    
   QList<int> from;
   from.append(1);
   from.append(5);
   from.append(9);
   from.append(7);
   from.append(7);
  
   QList<int> *to=static_cast<QList<int>*>(sharedMem.data());
   int s=from.size();
   memcpy(to,&from,s);
         sharedMem.unlock();
  
  } 
}
 
main.cpp
#include <QApplication>
#include "core.h"
int main(int argc,char *argv[])
{
 QApplication app(argc,argv);
 ShareMemoryLoad mem;
 mem.show();
 return app.exec();
}
 
===========================================================================
showshare工程,显示共享内存的内容
core.h
#ifndef _CORE_H
#define _CORE_H
#include <QWidget>
#include <QSharedMemory>
class ShareMemoryLoad:public QWidget
{
 Q_OBJECT
public:
 ShareMemoryLoad(QWidget *parent=0);
 ~ShareMemoryLoad();
private:
 QSharedMemory sharedMem;
 void loadIntoSharedMem();
};
#endif
 
core.cpp
#include "core.h"
#include <QBuffer>
#include <QList>
#include <list>
using namespace std;
ShareMemoryLoad::ShareMemoryLoad(QWidget *parent):QWidget(parent),sharedMem("MemoryTest")
{
 loadIntoSharedMem();
}
ShareMemoryLoad::~ShareMemoryLoad()
{}
void ShareMemoryLoad::loadIntoSharedMem()
{
  if (sharedMem.attach())
  {          
   sharedMem.lock();
   const QList<int> *list=static_cast<const QList<int>*>(sharedMem.constData());
   int s=list->size();
   QList<int> test;
   memcpy(&test,list,s);
   sharedMem.unlock();    
  }    
}
 
main.cpp
#include <QApplication>
#include "core.h"
int main(int argc,char *argv[])
{
 QApplication app(argc,argv);
 ShareMemoryLoad mem;
 mem.show();
 return app.exec();
}
===================================================================
shareload工程能成功运行,在运行showshare工程,执行到loadIntoSharedMem函数的const QList<int> *list=static_cast<const QList<int>*>(sharedMem.constData());时,无法正确获得存储的QList,请教下我的代码写的有问题么,或者告知正确的方法,万分感谢。