Qt学习笔记-----信号槽

Qt提供signals and slots mechanism(信号槽机制)来保证两个对象之前的关联(connection)。

所谓信号槽,简单理解就是两部分,一个是某对象发出的信号,一个是某对象接收该信号的槽。而信号和槽其实就是一个个函数。某一个组件发出了一个信号,另一个组件接收到这个信号,执行相应的函数调用。有点像if语句:

if(//emit signal)
{
  //slot function is invoked
}
else
{
}

但是Qt::的信号槽机制允许我们将两个毫无关系的对象进行关联。说的更离奇点,发出信号的对象根本就不需要知道有没有对象会接收这个信号,当然就更不会知道是谁接收这个信号。而接收信号的槽对象也根本就不知道它接收的这个信号是谁发出的。信号和槽之间的通讯,是Qt帮助我们完成的,我们要做的,只是使用connect函数显示地关联一下信号和槽,告诉编译器”给我盯着点这个信号,如果它被发出了,赶紧去调用槽函数“。


举个例子,当点击搜索按钮,那么搜索按钮(button)的被点击(clicked())信号就会发出,与之关联的槽函数将会被执行,我们猜这个槽函数应该首先会读取输入框中的字符串("connect"),然后通过某种查找算法将结果显示到文本框中,随后看到了搜索结果。

connect函数有五个重载,比较常见的形式为:

connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection );

其中sender和receiver是两个对象(Object)指针,signal和method分别是他们的成员函数。Qt中可以使用SIGNAL()和SLOT()将函数转换成const char*的形式。

举个例子:假设MyButton是一个button按钮类,它有一个信号clicked(),表示 一旦这个按钮被点击,相应的信号就会发出。还有一个Close类,它有一个exit()函数,可以关闭整个窗口。sender是MyButton类的指针,receiver是Close类的指针。

我们想要实现一旦用户点击button,窗口就会关闭,那么就需要关联这两个类,就像这样:

connect(sender, SIGNAL(clicked()), receiver, SLOT(exit());

或者

connect(sender, &MyButton::clicked, receiver, &Close::exit);

就可以达到目的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值