Qt奇淫技巧-使用QSharedMemory方式实现数据跨界面传输_qsharedmemory 路徑

37 阅读1分钟

 

运行截图如下:

源码如下:

sharedwidget.h

#ifndef SHAREDWIDGET_H
#define SHAREDWIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
class QSharedMemory;
QT_END_NAMESPACE

namespace Ui {
class SharedWidget;
}

class SharedWidget : public QWidget
{
    Q_OBJECT

public:
    explicit SharedWidget(QWidget *parent = 0);
    ~SharedWidget();

protected slots:
    void LineEditTextChanged(QString text);

private:
    Ui::SharedWidget *ui;
    QSharedMemory *m_sharedMemory;
};

#endif // SHAREDWIDGET_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
class QSharedMemory;
QT_END_NAMESPACE

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

protected:
    void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;

protected slots:
    void btnClicked();

private:
    Ui::Widget *ui;
    QSharedMemory *m_sharedMemory;
    int m_timerId;
};

#endif // WIDGET_H

main.cpp

#include "widget.h"
#include "sharedwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Widget w;
    w.show();

    return a.exec();
}

sharedwidget.h

#include "sharedwidget.h"
#include "ui_sharedwidget.h"
#include <QSharedMemory>
#include <QDataStream>
#include <QBuffer>
#include <QDebug>

SharedWidget::SharedWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SharedWidget)
{
    ui->setupUi(this);
    m_sharedMemory = new QSharedMemory("123456");
    connect(ui->lineEdit, SIGNAL(textChanged(QString)),
            this, SLOT(LineEditTextChanged(QString)));
}

SharedWidget::~SharedWidget()
{
    delete ui;
}


void SharedWidget::LineEditTextChanged(QString text)
{
    if(m_sharedMemory->isAttached()){
        if(!m_sharedMemory->detach()){
            return;
        }
    }

    QBuffer buffer;
    buffer.open(QBuffer::ReadWrite);
    QDataStream out(&buffer);
    out << text;

    if(!m_sharedMemory->create(buffer.size())){

        qDebug()<< "create failed!";
        return;
    }

    m_sharedMemory->lock();
    char *to = static_cast<char*>(m_sharedMemory->data());
    const char *from =text.toStdString().c_str();
    memcpy(to, from, qMin(m_sharedMemory->size(), (int)buffer.size()));
    m_sharedMemory->unlock();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "sharedwidget.h"
#include <QDebug>
#include <QBuffer>
#include <QDataStream>
#include <QSharedMemory>

Widget::Widget(QWidget *parent) :
    QWidget(parent),


![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e9db6e40dad7457f81f8b0dff3a5418d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771856391&x-signature=B%2FCDa0Rz%2F5rLt0bUP71P%2F82u29w%3D)
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/05a3e46c3d1a4039b7c42968eb84c5ad~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1771856391&x-signature=BhqiTnRzhIEKgmxU2jESxuthqnU%3D)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**