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();
相关文章推荐
- Qt信号与槽工作机制--译文
- QT编译错误
- QT 下载文件
- Qt信号与槽机制源码分析
- Qt和Cocoa混合编程
- Ubuntu+Qtcreator2.4.1+opencv2.4.9+安装
- genQtProFile.py
- Qt静态库的下载和安装配置
- Qt编程之通过鼠标滚轮事件缩放QGraphicsView里面的Item
- QTP破解方法
- Ubuntu下Qt编译报错:“make: g++:命令未找到”
- Qt界面显示图片,Qt与opencv的联合运用
- QT实现截屏功能
- QT 中 事件处理转移
- Qt画图QCustomPlot之安装篇
- 关于在Qt里编译生成静态库文件
- opencv与Qt的结合使用
- QT拾遗
- 信号槽链接触发写销毁
- Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)