码迷,mamicode.com
首页 > 其他好文 > 详细

【Qt】2.2 继续了解信号和槽

时间:2016-07-15 00:13:00      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

槽和普通成员函数一样,可以是虚函数、被重载,可以是公有、私有、保护的。它可以被其它C++成员函数调用。

槽连接了信号,当发射这个信号时,槽会被自动调用。

连接函数:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionTypetype = Qt::AutoConnection )

sender和receiver是指向QObject的指针。

signal和method是不带参数名的函数,需要使用宏SIGNAL()和SLOT()。

 

一个信号可以连接多个槽,例如:

connect(okButton, SIGNAL(clicked(bool)),

    checkBox1, SLOT(click()));

connect(okButton, SIGNAL(clicked(bool)),

     checkBox2, SLOT(click()));

当点击okButton时,checkBox1和checkBox2都会执行各自的槽click()。

 

多个信号可以连接同一个槽,例如:

connect(okButton, SIGNAL(clicked(bool)),

checkBox1, SLOT(click()));

connect(cancelButton, SIGNAL(clicked(bool)),

     checkBox1, SLOT(click()));

点击okButton或cancelButton时,checkBox1都会执行槽click()。

 

一个信号可以与另个一个信号连接,例如:

connect(okButton, SIGNAL(clicked(bool)),

    checkBox1, SLOT(click()));

connect(cancelButton, SIGNAL(clicked(bool)),

     okButton, SIGNAL(clicked(bool)));

当点击cancelButton时,会由okButton的信号clicked(bool)做响应,okButton会发射信号clicked(bool),从而checkBox1的槽click()会自动执行。

另外,cancelButton的信号clicked(bool)中的bool参数会传递给okButton的信号clicked(bool)中的bool参数。

在这里okButton的clicked(bool)信号被当作槽来使用,槽中有多少个参数,就会要求发射信号的函数至少要带有多少个参数,否则连接是不成功的。

 

连接可以被移除,例如:

connect(okButton, SIGNAL(clicked(bool)),

    checkBox1, SLOT(click()));

 

disconnect(okButton, SIGNAL(clicked(bool)),

     checkBox1, SLOT(click()));

当删除对象时,Qt会自动删除与这个对象相关的所有连接。

 

 

信号的参数数量至少是槽的参数数量。

1.例如:

connect(okButton, SIGNAL(clicked(bool)),

    checkBox1, SLOT(click()));

当发射信号时,信号的bool参数是没有用的。

 

2.例如:

connect(okButton, SIGNAL(clicked(bool)),

checkBox1, SLOT(setHidden(bool));

当发射信号时,信号的bool参数会传递给槽的bool参数。

 

3.例如:

connect(checkBox1, SIGNAL(released()),

cancelButton, SLOT(setVisible(bool)));

这是错误的,槽要求一个bool参数,信号也必须有这一个bool参数。

 

4.例如:

connect(this, SIGNAL(send(bool, int, double)),

     this, SLOT(recive(bool, int)));

信号的参数个数可以大于等于槽的参数个数,同时信号和槽的各个参数位置需要对应。

在这里,信号的第三个参数double类型不会被传递到槽。

 

 

在成员函数中手动发射信号,使用emit,例如:

技术分享

在对象创建时,构造函数就已经连接了setVal信号和recive槽。

当对象调用SetValue()函数时,全发射setVal信号,同时传入相应的参数值,发射信号之后会由recive槽接收,设置val变量的值。

 

 

好咯,这一节的总结就到这里~

【Qt】2.2 继续了解信号和槽

标签:

原文地址:http://www.cnblogs.com/recordprogram/p/5671775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!