我在使用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,请教下我的代码写的有问题么,或者告知正确的方法,万分感谢。