网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Programming > QT > 文章  
QT的信号与槽机制介绍
文章来源: IBM Developerworks 文章作者: 唐新华 发布时间: 2001-06-01   字体: [ ]  
 
// 定义槽函数mySlot()
void TsignalApp::mySlot()
{
  QMessageBox::about(this,"Tsignal", "This is a signal/slot sample without parameter.");
}
 
// 定义槽函数mySlot(int)
void TsignalApp::mySlot(int x)
{
  QMessageBox::about(this,"Tsignal", "This is a signal/slot sample with one parameter.");
}
 
// 定义槽函数mySlotParam(int,int)
void TsignalApp::mySlotParam(int x,int y)
{
  char s[256];
  sprintf(s,"x:%d y:%d",x,y);
  QMessageBox::about(this,"Tsignal", s);
}
 
void TsignalApp::slotFileNew()
{
  //发射信号mySignal()
  emit mySignal();
  //发射信号mySignal(int)
  emit mySignal(5);
  //发射信号mySignalParam(5,100)
  emit mySignalParam(5,100);
}

  应注意的问题

  信号与槽机制是比较灵活的,但有些局限性我们必须了解,这样在实际的使用过程中做到有的放矢,避免产生一些错误。下面就介绍一下这方面的情况。

  1.信号与槽的效率是非常高的,但是同真正的回调函数比较起来,由于增加了灵活性,因此在速度上还是有所损失,当然这种损失相对来说是比较小的,通过在一台i586-133的机器上测试是10微秒(运行Linux),可见这种机制所提供的简洁性、灵活性还是值得的。但如果我们要追求高效率的话,比如在实时系统中就要尽可能的少用这种机制。

  2.信号与槽机制与普通函数的调用一样,如果使用不当的话,在程序执行时也有可能产生死循环。因此,在定义槽函数时一定要注意避免间接形成无限循环,即在槽中再次发射所接收到的同样信号。例如,在前面给出的例子中如果在mySlot()槽函数中加上语句emit mySignal()即可形成死循环。

  3.如果一个信号与多个槽相联系的话,那么,当这个信号被发射时,与之相关的槽被激活的顺序将是随机的。

  4. 宏定义不能用在signal和slot的参数中。

  既然moc工具不扩展#define,因此,在signals和slots中携带参数的宏就不能正确地工作,如果不带参数是可以的。例如,下面的例子中将带有参数的宏SIGNEDNESS(a)作为信号的参数是不合语法的:

#ifdef ultrix
#define SIGNEDNESS(a) unsigned a
#else
#define SIGNEDNESS(a) a
#endif
 
class Whatever : public QObject
{
  [...]
signals:
  void someSignal( SIGNEDNESS(a));
  [...]
};

 
推荐文章
·Qt 的内部进程通信机制
·Qt中的多线程编程
 

 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·Qt中的多线程编程
·Qt 的内部进程通信机制
相关文章
·Qt 的内部进程通信机制
·Qt中的多线程编程
·GCC创建共享库
·致初学者:PHP比ASP优秀
·Linux如何处理当前运行
·Linux操作系统套接字编
·幕启:介绍 Z shell
·巧用AWK处理二进制数据
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统