信号与槽
时间:2010-11-23 来源:osullishuai80
一、信号与槽概述
(1)信号:一个特定的标示,当内部发生某些事件或状态改变时能够被发射.
(2)槽 :与普通的C++类的成员函数几乎是一样,唯一区别在于,槽可以和信号连接在一起,当发射这个信号的时候,就会自动调用这个槽.
(3)信号与槽的作用:对象之间通信的高级接口.简而言之,信号就是某件事情的触发,槽就是当事情发生时执行的动作.比如,当用户按下"确定"键时,该键就发出clicked()信号,然后槽就用于处理当按下"确定"键后需要执行的动作.
二、信号与槽的连接
(1)Designer实现两者的连接
<1>切换到"信号和槽编辑模式"(图1)
<2>左键拖动"show"到"helloQT"上,释放鼠标,会弹出信号和槽对话框.(图2)
<3>选择连接"clicked()"信号和show()槽.(图3)
<4>用同样的方法连接"Hide"的"clicked()"信号和"helloQT"的show()槽.最终效果如下所示.(图4)
(2)代码实现两者的连接
QObject::connect(a,SIGNAL(a_signal(int)),b,SLOT(b_slot(int)),Qt::ConnectionType);
<1>参数1:对象a
<2>参数2:对象a所发出的信号
<3>参数3:对象b
<4>参数4:对象b的槽,即对象b处理(对象a所发出的)信号的函数
<5>参数5:定义了信号与槽之间的关联.常选择默认值Qt::AutoConnection,也可以不写该参数.
【attention】
<1>一个信号可以连接多个槽.
<2>多个信号可以连接一个槽.
<3>一个信号可以与另外一个信号相连接.
<4>a_signal和b_slot中只能有参数类型,而非具体的值,且类型为Qt已知的类型.
<5>要将信号成功连接到槽或另外一个信号,它们的参数必须具有相同的类型和个数.若信号参数比槽的参数多,则多数的参数将被忽略.
【attention】
在Qt中,除了使用系统提供的信号和槽外,还可以使用程序员自己定义的信号与槽.它的实现过程如下:
<1>类的开始声明处加入宏Q_OBJECT.
<2>在函数声明前加入signals和slots关键字.
<3>信号只需声明,无需实现.使用时只需 emit mysignal(参数列表)
<4>槽函数和普通C++成员函数一样实现.
<5>自定义槽函数的另一种书写形式:
on_<sender_objectName>_<signal>(参数)
如:void on_pushButton_clicked()
对象名:pushButton 信号:clicked()
注意,这样书写的槽函数,系统会自动进行相对应信号与槽的连接,不需要connect.
【attention】QTimer定时器
QTimer *timer = new QTimer(this);
timer->start(1000); /*定时器启动后,每隔1s发送一timeout()信号*/
timer->stop(); /*停止定时器*/
相关阅读 更多 +