日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QCopChannel的用法

發布時間:2025/4/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QCopChannel的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QT提供了很多的進程間通訊的方法,例如共享內存,QProcess等等。但有一種方法是嵌入式端所獨有的,那就是Qt Communications Protocol(QCOP)QT通訊協議,這種方法只能用于QT Embeded。

網上關于這種用法的資料比較少,研究了半天才搞明白是怎么回事。

QCOP將進程間的通訊簡化,使之就像使用QT中的信號與槽一樣方便。

用法:

1.首先是編寫接收消息的程序

channel = new QCopChannel(QString("/System/recevie"),this);connect(channel, SIGNAL(received(const QString&,const QByteArray&)), this, SLOT(processReceviedMsg(const QString&,const QByteArray&)));

? 這個/System/recevie可以隨便填寫,但在之后必須與發送端的程序設定的一致。 QCopChannel類中已經提供了一個信號received(const QString&,const QByteArray&),只需要將這個信號連接到自己寫好的槽函數上,就可以使用了。 這個信號的第一個參數是類型,可以讓你識別發過來的消息是什么類型,可以自由填寫任意的字符串,只要你自己知道就行。 第二個參數,是數據,是你傳送過來的數據。 ?

?

2.編寫發送消息的程序 發送端的編寫就更簡單了。 ?

QByteArray data;QCopChannel::send(QString("/System/recevie"), "print(QString)", data);

? 只需要讓send中的/System/recevie與接收端的一致,那么發送的消息就會發給所有注冊了/System/recevie的進程。 還可以使用

QCopChannel::isRegistered("/System/recevice");

?

查詢是否有這個channel注冊過。

?

注意事項:

研究怎么使用QCOP的過程中,遇到了一些問題,寫出來,希望對別人有幫助。

1.A進程以服務器的形式運行(也就是加了-qws參數),B進程以客戶端形式運行(未加-qws參數),那么A向B發送的消息,B是不能接收的。但B向A發送消息,A是可以收到的。

2.在嵌入式端不需要所有程序都加上-qws參數,只需要有一個程序以服務器形式運行,其他程序也都可以正常運行,這樣才能由一端向另一端發送消息。

3.如果需要相互發送消息,只要另外運行一個帶-qws參數的程序C,再啟動這兩個程序A和B(不加-qws),這樣A和B就可以互通消息了。

轉載于:https://www.cnblogs.com/cxjchen/p/3184057.html

總結

以上是生活随笔為你收集整理的QCopChannel的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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