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

74 阅读2分钟

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

 

运行截图如下:

源码如下:

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),
    ui(new Ui::Widget)


**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8e1c5a28d21d48b0a739d434d5a68bc2~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771926937&x-signature=SLROQGTcpeVTn9j4y2bgmSo7bwY%3D)
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f92d2939ba5441ce8256cf8fee4e7b1b~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1771926937&x-signature=%2FsCMJJU3GS4cXuPF1TfzD77MwW8%3D)

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

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**