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

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


2、 信号-槽(Signal-Slot)机制

在Qt中,有一种用于对象之间的通信:信号-槽机制,这种机制是Qt的核心机制,也是它区别于其他GUI工具的最主要的特征。在大多数GUI工具中,通常为可能触发的每种行为定义一个回调函数,这个回调函数是一个指向函数的指针。在Qt中,信号-槽机制取代了这种繁杂的函数指针,能够实现同样的功能。信号-槽机制可以携带任意类型、任意数量的参数,而且完全是安全的,不会引起系统的崩溃。

所有由QObject类继承而来的类,或者是它的一个子类,都可以包括信号-槽机制。信号通常是当对象改变他们的状态时发出的,这就是一个对象在需要与其他对象通信时所需要做的一切,它并不知道是否有其他对象在另一端接收该信号。从这个意义上来说,这种机制实现了真正的信息封装,确保了对象可以被当作一个独立的软件构件来使用。

而槽可以被用于接收信号,它们通常是类中的成员函数。一个槽并不知晓是否有一个信号与自己相联系,同样,包含有槽函数的对象也对通信机制一无所知,它们也可以作为一个独立的软件构件。

用户可以按照需要将许多信号与一个单独的槽函数相联系,一个信号也可以按需要被联系到很多不同的槽函数。甚至还可以将一个信号直接与另一个信号相联系,这样当第一个信号被发出时立刻发出第二个信号。这样,信号-槽相结合就产生了一种功能强大的编程机制。

例如:

 

 

  button = new QAction(tr("button"), QIconSet(QPixmap("button.png")), 0, 0, this).

  connect(button, SIGNAL(activated()), this, SLOT(slotButton())).
  

程序中定义了一个按钮,并利用connect()函数将该按钮button的activated()信号与slotButton()函数相关联,当用户触发按钮时,就会执行相应的槽函数。当然,这里的信号是QAction类中预先定义好的信号,用户在使用该机制时,可以根据需要自行定义信号,同时在适当的时候利用emit语句发出该信号。另外,在信号和相应的槽函数之间还可以传递任意参数,如:

 

 

  emit signal(parameter).


相关文章


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