qt 程序間通訊

2021-08-25 08:02:15 字數 1832 閱讀 6526

qt中仍可以利用傳統的程序間通訊方式(共享記憶體..)

·在桌面環境中,在傳統的程序間通訊方式的基礎上發展了更為方便的物件導向的通訊方式

-kde環境:dcop

-gnome環境:bonobo

· dbus:freedesktop開源專案的linux ipc通訊機制,kde和gnome環境都能支援

· qt embedded中定義了一種自己的輕量級的程序間通訊機制qcop

qcop:

· qcop利用qcopchannel類來實現.

· qcopchannel從qobject類繼承而來

-提供了靜態函式send()來傳送需要傳遞的訊息和資料

-靜態函式isregistered()來查詢某個channel是否已經被註冊

-當從channel中接收訊息和資料時,我們需要構造乙個qcopchannel的子類並重寫receive()函式,或者提供乙個槽並利用connect()函式將receive()訊號連線起來

·利用qcop可以方便的結合qt本身的訊號和槽的機制,使用非常方便

·但對於非qt程式與qt程式的通訊,則只能使用其他ipc方式

qcop示例:

在乙個程序中傳送訊息和資料:

qbytearray data;

qdatastream out(&data,qiodevice::writeonly);

out<

在另乙個程序中接收訊息和資料:

qcopchannel *channel=new qcopchannel(「/system/temperature」,this);

connect(channel,signal(received(const qstring &, constqbytearray&)), this,slot(handlemsg(const qstring&,const qbytearray&)));

下面是乙個示例:

pid_t pid = fork();

//建立子程序

//子程式1的標頭檔案

#ifndef cel_h

#define cel_h

#include

class qslider;

class qhboxlayout;

class cel : public qwidget

;private slots:

void handlemsg(const qstring &message, const qbytearray &data);

void sendmsg(int celnum);//槽

}void cel::fahtocel(int fahnum)

void cel::listenchannel()

void cel::handlemsg(const qstring &message, const qbytearray &data)//

處理收到資訊

}void cel::sendmsg(int celnum)

//傳送資訊

子程式2的標頭檔案

#ifndef fah_h

#define fah_h

#include

class qdial;

class qvboxlayout;

class fah : public qwidget

;private slots:

void handlemsg(const qstring &message, const qbytearray &data);

void sendmsg(int fahnum);

//自定義槽

qt 程序間通訊

qt中仍可以利用傳統的程序間通訊方式 共享記憶體.在桌面環境中,在傳統的程序間通訊方式的基礎上發展了更為方便的物件導向的通訊方式 kde環境 dcop gnome環境 bonobo dbus freedesktop開源專案的linux ipc通訊機制,kde和gnome環境都能支援 qt embed...

Qt程序間通訊

程序間通訊,就是在不同程序之間傳播或交換資訊。管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 named pipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semophor...

QT 程序間通訊 Socket通訊

通過qt提供的qtnetwork模組即可實現程序間通訊,tcp ip在實現應用程式和程序內部通訊或與遠端程序間的通訊方面非常有用。qtnetwork模組提供的類能夠建立基於tcp ip的客戶端與服務端應用程式。為實現底層的網路訪問,可以使用qtcpsocket qtcpserver和qudpsock...