第四讲 深入介绍信号与槽

本文概要:讲解Qt的信号与槽机制,涉及信号与槽的连接方法,连接条件等。

可以使用信号与槽机制的类

信号与槽机制是在QObject类中实现的,这种机制能够用与任何QObject子类中,但是应该在类中加入Q_OBJECT宏。

槽的介绍

槽与普通的c++成员函数几乎一样;槽能够被声明为虚函数,能被重载,能够被其他函数调用等,与c++普通

的成员函数不同之处仅仅在于槽可以与信号连接在一起,每当发射与槽可以接受的信号时,槽会被自动调用。

槽与信号的连接方法:

connect(sender, SIGNAL(signal), receiver, SLOT(slot));

sender和receiver都应该为指向QObject的指针,signal与slot为不带参数的函数名;SIGNAL与SLOT宏会将它们的参数转换为相应的字符串。

槽与信号连接的可能情况:

一个信号连接多个槽

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

当发射信号时,会以不确定的顺序调用这些槽;

多个信号连接一个槽

connect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError())); connect(calculator, SIGNAL(divisionByZeor()), this, SLOT(handleMathError()));

无论发射那个信号都会调用连接的槽;

信号可以与另外一个信号连接:

connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updataRecord(const QString &)));

当发射第一个信号时,第二个信号也会被发送,除此之外,信号的相互连接与信号与槽的连接难以区分。

信号与槽(或者信号)的连接可以被移除

disconnect(lcd, SIGNAL(overflow( )), this, SLOT(handleMathError( )));

一般情况下较少用到。另外,当删除对象时,Qt会自动与这个对象相关的所有连接;

信号与槽(或者信号)成功连接的条件

信号与槽的顺序必须有相同的顺序与相同的类型,如果信号的参数比它所连接的槽的参数多,多余的参数会被忽略。另外,在信号与槽使用connect()连接时,

信号与槽的名字中不能包含参数名。

 

原文地址:https://www.cnblogs.com/tallisHe/p/4419168.html