Linux程序开发:QT的内部进程通信(2)

文章作者 100test 发表时间 2007:03:14 16:41:14
来源 100Test.Com百考试题网


在Qtopia中,所有的channels名都以"QPE/"开始,而messagename则是一个函数的标识符。在接收消息时,通常只需要利用在应用程序中预先定义好的QPE/Application/{appname}管道,当然,也可以根据需要自己定义管道,并将其与一个slot函数相关联:

  

  myChannel = new QCopChannel( "QPE/FooBar", this ).

  connect( myChannel, SIGNAL(received(const QCString &., const QByteArray &.)),

       this, SLOT(fooBarMessage( const QCString &., const QByteArray &.)) ).

 
 

下面将具体的通信过程举例如下,在需要接收消息的类(如Window1)中定义管道:

  

   QCopChannel *doChannel = new QCopChannel("QPE/Do", this).

   connect(doChannel, SIGNAL(received(const QCString &., const QByteArray &.)),

 this, SLOT(doMessage

(const QCString &., const QByteArray &.))).
  

同时,需要在该类中定义相应的消息处理函数doMessage,

 

 

  void Window1::doMessage(const QCString &.msg, const QByteArray &.args)

  {

   QDataStream stream(args, IO_ReadOnly).

   if(msg == "Message1(QString)")

   {

   QString text.

   stream >> text.

   button->setText(text).

   }

   else if(msg == "Message2()")

   {

   close().

   }

  }

 
 

其中的Message1(QString)和Message2(QString)都是用户自己定义的消息,该函数中分别对这些消息进行了相应的处理。在该例中当收到带有参数的Message1消息时,将该字符串参数stream显示在按钮button上;当收到Message2消息时,将执行关闭Window1窗口的动作,当然用户可以根据需要自行编写相应的处理过程。

另一方面,在类Class2中需要发出消息的函数function中利用QCopEnvelope发送消息:

 

 

  

  void Class2::function()

  {  QCopEnvelope e("QPE/Do", "Message1(QString)").

    e << param. }

这里发出了Message1消息,并将需要携带的参数param发送到管道中。

通过这样的过程,用户可以很方便地实现不同对象、不同进程之间通信过程,而且可以根据需要在通信过程中任意传递参数。



相关文章


Linux操作系统中常见的桌面环境介绍
Linux程序开发:QT的内部进程通信(4)
Linux程序开发:QT的内部进程通信(3)
Linux操作系统下的CAD系统详细介绍(3)
Linux程序开发:QT的内部进程通信(2)
Linux操作系统下的CAD系统详细介绍(1)
Linux程序开发:QT的内部进程通信(1)
Linux操作系统下的CAD系统详细介绍(2)
Linux操作系统上最好的10款开源游戏
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛