當前位置:
首頁 >
Qt奇淫技巧-使用QSharedMemory方式实现数据跨界面传输
發布時間:2025/3/15
30
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Qt奇淫技巧-使用QSharedMemory方式实现数据跨界面传输
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于QSharedMemory相關的知識點在下面這個鏈接中!
https://blog.csdn.net/qq78442761/article/details/81738155
?
這里使用QSharedMemory可以實現信號與槽中跨界面傳輸數據的功能!
?
原理是:
發送界面獲取到數據就寫到SharedMemory中
而獲取端,用個記時器,時時去多,奇淫技巧啊!
?
運行截圖如下:
源碼如下:
sharedwidget.h
#ifndef SHAREDWIDGET_H #define SHAREDWIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE class QSharedMemory; QT_END_NAMESPACEnamespace Ui { class SharedWidget; }class SharedWidget : public QWidget {Q_OBJECTpublic:explicit SharedWidget(QWidget *parent = 0);~SharedWidget();protected slots:void LineEditTextChanged(QString text);private:Ui::SharedWidget *ui;QSharedMemory *m_sharedMemory; };#endif // SHAREDWIDGET_Hwidget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE class QSharedMemory; QT_END_NAMESPACEnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic: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_Hmain.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) {ui->setupUi(this);m_sharedMemory = new QSharedMemory;m_sharedMemory->setKey("123456");m_timerId = startTimer(0);connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(btnClicked())); }Widget::~Widget() {delete ui;delete m_sharedMemory; }void Widget::timerEvent(QTimerEvent *event) {if(event->timerId() == m_timerId){if(!m_sharedMemory->attach()){return;}QBuffer buffer;m_sharedMemory->lock();buffer.setData((char*)m_sharedMemory->constData(), m_sharedMemory->size());buffer.open(QBuffer::ReadOnly);QString data = buffer.readAll();m_sharedMemory->unlock();m_sharedMemory->detach();ui->label->setText(data);} }void Widget::btnClicked() {SharedWidget *sharedWidget = new SharedWidget;sharedWidget->show(); }?
總結
以上是生活随笔為你收集整理的Qt奇淫技巧-使用QSharedMemory方式实现数据跨界面传输的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt文档阅读笔记-Widgets Tut
- 下一篇: Qt工作笔记-使用QpropertyAn