您的位置:首页 > 编程语言 > Qt开发

QT共享内存使用

2015-05-28 21:46 387 查看
1、打开对话框从本地获取文件
QString fileName = QFileDialog::getOpenFileName(0, QString(), QString(),
tr("Images (*.png *.xpm *.jpg)"));
2、QLabel显示本地加载的图片
QImage image;
if (!image.load(fileName)) {
ui.label->setText(tr("Selected file is not an image, please select another."));
return;
}
ui.label->setPixmap(QPixmap::fromImage(image));
3、将图像数据写入到一个QBuffer之中
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
out << image;
int size = buffer.size();
4、创建共享内存
QSharedMemory sharedMemory("memoryKey");//需要传入keyName,才可以
//sharedMemory.setKey("memoryKey"); //更换关键字
if (!sharedMemory.create(size)) {
ui.label->setText(tr("Unable to create shared memory segment."));
return;
}
5、将图像数据写入到共享内存之中
QSharedMemory sharedMemory;
sharedMemory.lock();
char *to = (char*)sharedMemory.data();
const char *from = buffer.data().data();
memcpy(to, from, qMin(sharedMemory.size(), size));
sharedMemory.unlock();
6、将共享内存中数据写入到图像中
QSharedMemory sharedMemory;
QBuffer buffer;
QDataStream in(&buffer);
QImage image;

sharedMemory.lock();
buffer.setData((char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QBuffer::ReadOnly);
in >> image;
sharedMemory.unlock();
7、判断进程与共享内存是否关联
QSharedMemory sharedMemory;
sharedMemory.detach();//企图让进程与共享内存脱离
if (!sharedMemory.attach()) {//企图让进程与共享内存关联
}
if (sharedMemory.isAttached())//判断进程是否与共享内存关联
detach();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: