簡單的QT程序間通訊QCOP(1)

2021-06-04 21:17:21 字數 1925 閱讀 8828

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::send(「/system/temperature」,」convertceltofah(int)」,data);

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

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

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

下面是乙個示例:

作為服務端執行 –qws

#ifndef conversion_screen_h

#define conversion_screen_h

#include

class copserv : public qwidget

; private slots:

void launchfah();

void launchcel();

private:

void createscreen();

}; #endif //conversion_screen_h

程式主體

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include "copserv.h"

copserv::copserv() : qwidget()

void copserv::createscreen()

pid_t pid = fork();     //建立子程序

if (pid == 0)

_exit(-1);

} }void copserv::launchcel()

void copserv::launchfah()

#include "copserv.h"

int main(int argc, char *argv)

qt 程序間通訊

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

qt 程序間通訊

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

Qt程序間通訊

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