QT学习随笔---信号槽

来源:互联网 发布:js图片点击弹出放大 编辑:程序博客网 时间:2024/05/21 11:06

QT作为C++的一个类库。

槽函数,槽函数与普通的C++类成员函数区别不大,可以virtual,可以被继承、重写等,也具有public、protect、private属性。可以被其它类调用,参数类型任意。

 

connect()语句原型:

bool QObject::connect(const QObject* sender,const char * signal,const QObject * receiver,const char * member)

参数:发送者,信号,接收者,槽函数。

当指定信号signal时必须使用宏SIGNAL(),当指定槽函数时必须使用宏SLOT(),如果发送者与连接者属于同一个对象时,那么在connect调用中接受者参数可以忽略。

SIGNAL和SLOT宏,用于把参数转换成字符串。

 

信号槽还可以有扩展用法。

1、一个信号可以对应多个槽函数

connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)),this, SLOT(updateStatusBarIndicator(int)));

类似上面的情况,槽函数会一个接一个的被调用,但是调用顺序不一定。

 

2、多个信号对应一个槽函数。

3、一个信号连接到另外一个信号。

connect(lineEdit, SIGNAL(textChanged(const QString &)),this, SIGNAL(updateRecord(const QString&)));
这是说,当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。

大同小异,目测也可以一个信号对应多个信号,类似上面的第一种情况。

 

 

注意:

为了正确的连接信号槽,信号和槽的参数个数、类型以及出现的顺序都必须相同。

也存在特殊情况,可以信号的参数个数多于槽函数的参数个数。多出的参数就被自动忽略掉了。

但是信号的参数个数不能少于槽函数参数个数。

在自写的信号槽中,如果存在循环链接的情况,需要在槽函数中加入判断,防止死循环。

0 0
原创粉丝点击