博客
关于我
Qt 进程通信QSharedMemory
阅读量:370 次
发布时间:2019-03-05

本文共 2352 字,大约阅读时间需要 7 分钟。

学习了Qt中进程通信的一种QSharedMemory

一下是测试代码,运行两个即可,一个load一个push

 
dialog.h#ifndef DIALOG_H#define DIALOG_H#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace Ui {class Dialog;}class Dialog : public QDialog{ Q_OBJECTpublic: explicit Dialog(QWidget *parent = 0); ~Dialog();private slots: void loadFromFileSlots(); void loadFromMemorySlots();private:// void detach();private: Ui::Dialog *ui; QSharedMemory *shareMemory;};#endif // DIALOG_Hdialog.cpp#include "dialog.h"#include "ui_dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog){ ui->setupUi(this); this->shareMemory = new QSharedMemory("shareMemoryExample"); this->setWindowTitle("sharedMemory Example"); connect(ui->loadImageButton,SIGNAL(clicked()),SLOT(loadFromFileSlots())); connect(ui->pushMemoryButton,SIGNAL(clicked()),SLOT(loadFromMemorySlots()));}Dialog::~Dialog(){ delete ui;}void Dialog::loadFromFileSlots(){ if(shareMemory->isAttached()) { if (!shareMemory->detach()) ui->label->setText(tr("Unable to detach from shared memory.")); } ui->label->setText("Select a Image File!"); QString fileName = QFileDialog::getOpenFileName(0,"Open a Image file",QDir::currentPath(),("Image (*.png *.bmp *.jpg)")); qDebug()<
label->setText("Select file is not an Image, please select another."); return; } // ui->label->setPixmap(QPixmap::fromImage(image)); QBuffer buffer; if(buffer.open(QIODevice::ReadWrite)) { QDataStream in(&buffer); in<
create(size)) { ui->label->setText("Unable to creat shared memory!"); return; } shareMemory->lock(); char *to = (char *)shareMemory->data(); const char *from = buffer.data().data(); memcpy(to,from,qMin(shareMemory->size(),size)); shareMemory->unlock(); }}void Dialog::loadFromMemorySlots(){ if(!shareMemory->attach()) { ui->label->setText("Unable to attach to shared memory segment.\n"); return; } QBuffer buffer; QDataStream in(&buffer); QImage image; shareMemory->lock(); buffer.setData((char*)shareMemory->constData(),shareMemory->size()); buffer.open(QBuffer::ReadOnly); in>>image; shareMemory->unlock(); shareMemory->detach(); ui->label->setPixmap(QPixmap::fromImage(image));}main.cpp#include "dialog.h"#include
int main(int argc, char *argv[]){ QApplication a(argc, argv); Dialog w; w.show(); return a.exec();}

转载地址:http://bzcg.baihongyu.com/

你可能感兴趣的文章
Metasploit Web服务器渗透测试实战
查看>>
MFC模态对话框和非模态对话框
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB可视化客户端管理工具之NoSQLbooster4mongo
查看>>
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>
MongoDB学习笔记(8)--索引及优化索引
查看>>
mongodb定时备份数据库
查看>>
mppt算法详解-ChatGPT4o作答
查看>>
mpvue的使用(一)必要的开发环境
查看>>
MQ 重复消费如何解决?
查看>>
mqtt broker服务端
查看>>
MQTT 保留消息
查看>>
MQTT 持久会话与 Clean Session 详解
查看>>
MQTT工作笔记0007---剩余长度
查看>>
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
Mqtt搭建代理服务器进行通信-浅析
查看>>
MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
查看>>
ms sql server 2008 sp2更新异常
查看>>