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

  • 相关阅读:
    shell日志重定向到null
    nginx用户权限问题
    找不到 libgtk-x11-2.0.so.0
    OSError: libgfortran.so.3: cannot open shared object file: No such file or directory
    macos不能打开windows samba共享问题(转载)
    centos 磁盘分区格式化与挂载
    冒泡排序java代码
    二分查找java代码
    java基础复习
    python第二天
  • 原文地址:https://www.cnblogs.com/cxjchen/p/3184057.html
Copyright © 2020-2023  润新知