#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle(QStringLiteral("QT共享内存"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::readmemdata()
{
QSharedMemory sha;
sha.setNativeKey(mapNmae);
if (!sha.attach()) {
ui->textBrowser->setText(tr("Unable to attach to shared memory segment.\n" \
"Load an image first."));
return;
}
QByteArray ba;
sha.lock();
ba=(char*)sha.constData();
ui->textBrowser->setText(QString(ba.data()));
sha.unlock();
sha.detach();
}
void MainWindow::writememdata(QByteArray ba)
{
sharedMemory.setNativeKey(mapNmae);
int size = ba.size();
//6.判断sharedMemory是否已经创建
if(!sharedMemory.create(4*1024)){
qDebug()<<(tr("Unable to create memory segment."))<< sharedMemory.errorString();
}else{
sharedMemory.lock();
char *to = (char*)sharedMemory.data();
const char *from = ba.data();
memcpy(to, from, qMin(sharedMemory.size(), size));
sharedMemory.unlock();
qDebug()<<"shared memory has created";
}
}
void MainWindow::on_read_button_clicked()
{
readmemdata();
}
void MainWindow::on_pushButton_2_clicked()
{
QByteArray ba = ui->textEdit->toPlainText().toLocal8Bit();
writememdata(ba);
}
评论0