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就可以互通消息了。

QCopChannel的用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

随机推荐

  1. C语言实现单链表-02版

    我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1 ...

  2. Leetcode 278 First Bad Version 二分查找(二分下标)

    题意:找到第一个出问题的版本 二分查找,注意 mid = l + (r - l + 1) / 2;因为整数会溢出 // Forward declaration of isBadVersion API. ...

  3. python连接数据库

    使用pymysql://安装pymysqlpip install pymysql 代码: # coding=utf8 import pymysql # 创建连接对象 conn = pymysql.co ...

  4. 開啟apache的日誌功能,但是不記錄.js;.css;.jpg;.ico;.png等訪問記錄

    維護web伺服器最重要的就是要每天都關注網站的訪問日誌,但是每天面對幾百兆的日誌文件實在是非常頭大,所以可以從根源上給日誌減肥一下,讓日誌只記錄對自己有用的內容就變得非常重了. Nginx伺服器要修改 ...

  5. mssql 获取表空间大小

    create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_ ...

  6. Django抛错不存在(DoesNotExist)

    from django.core.exceptions import ObjectDoesNotExist try: disabledusers.objects.get(sAMAccountName= ...

  7. swift入门篇-函数

    今天给大家介绍 swift函数,swift函数和c#,js的写法大致一直,但是与object-c写法有很大不同点.废话不多说,直接开始了. 1:函数  --常量参数 func 函数名( 参数变量:类型 ...

  8. 配置CENTOS YUM更新源

    众所周知,Centos 有个很方便的软件安装工具  yum,但是默认安装完centos,系统里使用的是国外的centos更新源,这就造成了我们使用默认更新源安装或者更新软件时速度很慢的问题. 为了使用 ...

  9. eclipse 和 android studio 编译时报 Unsupported major.minor version 52.0错解决办法

    version 52.0 是java8的环境.当gradle tools 升级到2.2.1时候,可能编译时候会报该错误. 很多网友说更改java version,但是很多时候无效.下面是我遇到时候的解 ...

  10. WPF UI虚拟化

    ComboBox