<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Qt實現程序間通訊的具體程式碼,供大家參考,具體內容如下
1.TCP/IP
Qt Network提供了眾多的類來實現網路程式設計。
2.共用記憶體
QSharedMemory是跨平臺的共用記憶體類,提供了存取作業系統共用記憶體的實現。它允許多個執行緒和程序安全地存取共用記憶體片段。此外,QSystemSemaphore可用於控制系統的共用資源的存取以及程序間通訊。
3.D-Bus
D-Bus模組是一個Unix庫,可以使用D-Bus協定來實現程序間通訊。它將Qt的訊號和槽機制擴充套件到了IPC層面,允許一個程序發射的訊號關聯到另一個程序的槽上。
4.QProcess
5.對談管理
在Linux/X11平臺上,Qt提供了對對談管理的支援,回話允許時間傳播到程序。例如,當關機時通知程序或程式,從而可以執行一些相關的操作。
dialog.h
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include <QSharedMemory> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private: Ui::Dialog *ui; QSharedMemory sharedMemory; void detach(); public slots: void loadFromFile(); void loadFromMemory(); private slots: void on_pushButtonLoadFromFile_clicked(); void on_pushButtonLoadFromSharedMemory_clicked(); }; #endif // DIALOG_H
dialog.cpp
#include "dialog.h" #include "ui_dialog.h" #include <QFileDialog> #include <QBuffer> #include <QDebug> Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); //在共用記憶體以前,需要先為其制定一個key,系統用它來作為底層共用記憶體段的標識。這個key可以是任意的字串 sharedMemory.setKey("QSharedMemoryExample"); } Dialog::~Dialog() { delete ui; } void Dialog::loadFromFile() { //判斷該程序是否已經連線到共用記憶體段,如果是,就將該程序與共用記憶體段進行分離。 if(sharedMemory.isAttached()) detach(); ui->label->setText(tr("選擇一個圖片檔案!")); QString fileName = QFileDialog::getOpenFileName(0,QString(),QString(),tr("Images(*.png *.jpg)")); QImage image; if(!image.load(fileName)) { ui->label->setText(tr("選擇的檔案不是圖片,請選擇圖片檔案")); return; } ui->label->setPixmap((QPixmap::fromImage(image))); //將圖片載入到共用記憶體 QBuffer buffer; //將圖片暫存到buffer中 buffer.open(QBuffer::ReadWrite); //獲取圖片資料的指標 QDataStream out(&buffer); out<<image; //獲取圖片的大小 int size = buffer.size(); //建立指定大小的共用記憶體段 if(!sharedMemory.create(size)) { ui->label->setText(tr("無法建立共用記憶體段"));// return; } //在共用記憶體段的操作時,需要先加鎖 sharedMemory.lock(); char * to = (char*)sharedMemory.data(); const char * from = buffer.data().data(); memcpy(to,from,qMin(sharedMemory.size(),size)); //解鎖 sharedMemory.unlock(); //如果將最後一個連線在共用記憶體段上的程序進行分離,那麼系統會釋放共用記憶體段。 } void Dialog::loadFromMemory() { //將程序連線到共用記憶體段 if(!sharedMemory.attach()) { ui->label->setText(tr("無法連線到共用記憶體段,n" "請先載入一張圖片!")); return; } QBuffer buffer; QDataStream in(&buffer); QImage image; sharedMemory.lock(); //讀取記憶體段中的資料 buffer.setData((char*)sharedMemory.constData(),sharedMemory.size()); buffer.open(QBuffer::ReadOnly); in>>image; sharedMemory.unlock(); sharedMemory.detach(); ui->label->setPixmap(QPixmap::fromImage(image)); } void Dialog::detach() { if(!sharedMemory.detach()) { ui->label->setText(tr("無法從共用記憶體中分離")); } } void Dialog::on_pushButtonLoadFromFile_clicked() { loadFromFile(); } void Dialog::on_pushButtonLoadFromSharedMemory_clicked() { loadFromMemory(); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45