QCopChannel的用法

QT提供了不少的进程间通信的方法,例如共享内存,QProcess等等。但有一种方法是嵌入式端所独有的,那就是Qt Communications Protocol(QCOP)QT通信协议,这种方法只能用于QT Embeded。html

网上关于这种用法的资料比较少,研究了半天才搞明白是怎么回事。服务器

QCOP将进程间的通信简化,使之就像使用QT中的信号与槽同样方便。函数

用法:

1.首先是编写接收消息的程序this

    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&),只须要将这个信号链接到本身写好的槽函数上,就能够使用了。 这个信号的第一个参数是类型,能够让你识别发过来的消息是什么类型,能够自由填写任意的字符串,只要你本身知道就行。 第二个参数,是数据,是你传送过来的数据。  spa

 

2.编写发送消息的程序 发送端的编写就更简单了。  htm

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

  只须要让send中的/System/recevie与接收端的一致,那么发送的消息就会发给全部注册了/System/recevie的进程。 还能够使用进程

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

 

查询是否有这个channel注册过。ip

 

注意事项:

研究怎么使用QCOP的过程当中,遇到了一些问题,写出来,但愿对别人有帮助。内存

1.A进程以服务器的形式运行(也就是加了-qws参数),B进程以客户端形式运行(未加-qws参数),那么A向B发送的消息,B是不能接收的。但B向A发送消息,A是能够收到的。字符串

2.在嵌入式端不须要全部程序都加上-qws参数,只须要有一个程序以服务器形式运行,其余程序也均可以正常运行,这样才能由一端向另外一端发送消息。

3.若是须要相互发送消息,只要另外运行一个带-qws参数的程序C,再启动这两个程序A和B(不加-qws),这样A和B就能够互通消息了。

相关文章
相关标签/搜索