当前位置:   article > 正文

深入理解Qt4/Qt5信号和槽机制_qt4和qt5信号与槽

qt4和qt5信号与槽

对于事件处理,MFC中使用的是消息映射机制,Qt使用的是信号和槽机制,在我看来,Qt的信号和槽比MFC功能更强大,也更灵活。
1、信号和槽的简单介绍:
一般格式:

connect(Sender,SIGNAL(signal),Receiver,SLOT(slot));  
connect(信号发送者,信号,信号接受者,槽函数);
  • 1
  • 2

做个很简单的比喻:运动比赛,裁判员鸣枪,运动员起跑,信号发送者是裁判,信号是枪声;信号接受者是运动员,槽函数(对信号做出的响应)是起跑。

所有的QObject都可以使用信号和槽机制,而Qt中的大部分类都是继承于QObject,SIGNAL()和()SLOT()是Qt定义的两个宏,他们返回其参数的C语言风格的字符串(const *char,信号加前缀2,槽加前缀1),因此下面的两个语句是相同的:

connect(Object2,SIGNAL(clicked()),Object3,SLOT(functionA())); 
connect(Object2,"2clicked()",Object3,"1functionA()");   
  • 1
  • 2

例如:

    QTimer *mytimer = new QTimer(this);
    mytimer->start(1000);
    connect(mytimer,"2timeout()",this,"slot_timer()"); 
    //等于 
    //connect(mytimer,SIGNAL(timeout()),this,SLOT(slot_timer()));

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

需要注意的是:
不论是信号还是槽函数,在SIGNAL()和SLOT()中使用时,参数只能包含变量类型,不能包含变量名,所有QVariant支持的参数类型,信号槽都支持,值得注意的是,QVariant和信号槽都不支持string类型,需要用函数qRegisterMetaType()注册一下,注册方法见第四条

2、信号和槽的变化:

//一个信号可以与另一个信号相连 
connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal2)); 
//同一
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/660995
推荐阅读
相关标签
  

闽ICP备14008679号