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的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么用C而不用C++
- 下一篇: jsp动作之 getProperty