日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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_H

widget.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_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) {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方式实现数据跨界面传输的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。