使用QT之进程和线程
共享内存
共享内存使用方法实例,在.ui中添加两个按钮控件,分别命名为:从文件中加载图片和从共享内存显示图片。并分别通过Label1和Label2显示出来。方法步骤:
(1)使用QFileDialog读取一幅图片,使用load加载到image中,在Label1中显示;
(2)创建buffer缓冲区,将image中的图片数据写入到buffer缓冲区中;
(3)在sharedMemory即共享内存中创建buffer大小的内存空间;
(4)调用sharedMemory的lock函数加锁,这是为了保证在同一时刻只有一个进程访问共享内存;
(5)通过memcpy函数将buffer中的图片数据复制到共享内存中;
(6)调用sharedMemory的unlock函数解锁;
(7)当点击 从文件中加载图片 按钮时,便在Label1中打开了图片并同时将图片存入到了共享内存中;之后我们通过共享内存直接读取图片;
(8)当点击 从共享内存显示图片 按钮时,使用buffer从共享内存中读取图片并在Label2中显示
void Dialog::loadFromFile()
{
if(sharedMemory.isAttached()) detach();
ui->label->setText(tr("选择一个图片"));
QString filenames=QFileDialog::getOpenFileName(0,QString(),QString(),tr("images(*.png *.jpg)"));//读图片
QImage image;
image.load(filenames);//加载图片
ui->label->setPixmap(QPixmap::fromImage(image));//标签显示图片
QBuffer buffer;//建立缓冲区
buffer.open(QBuffer::ReadWrite);//设置模式
QDataStream out(&buffer);
out<<image;//将图片写入缓冲区
int size=buffer.size();//计算缓冲区大小
sharedMemory.create(size);//在共享内存