信号与槽(Signal & Slot)
信号与槽是Qt编程的基础也是Qt的一大特色创新。因为有了信号和槽的机制,才使得在处理多个控件操作时更加简单也更加简洁。
信号(Signal)
就是控件被点击之后发出的信号。
槽(Slot)
就是响应信号的函数。
信号与槽的关联是用QObject::connect()函数实现,基本格式为:
QObject::connect(sender,SIGNAL(signal()),this,receiver,SLOT(slot()));
但是connect()是QObject类的静态函数,所以我们在使用时,可以直接写为:
connect(sender,SIGNAL(signal()),this,receiver,SLOT(slot()));
PS:
sender是发送信号的对象,signal()是发射信号的名称,this是在本窗口中实现,receiver是接收信号的对象,slot()是接收信号后进行相应操作的函数名称
关于信号和槽的使用,还需要注意一下规则
1.一个信号可以连接多个槽;
2.多个信号可以连接同一个槽;
3.一个信号可以连接另一个信号;
4.信号的数量不能少于槽的数量,否则会出现错误;
5.使用信号和槽的时候,必须在类的定义中加入宏Q_OBJECT:
class MainWindow : public QMainWindow
{
Q_OBJECT //若使用信号和槽,必须加入此宏
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
6.一个信号被发送时,与其关联的槽函数会立刻执行。只有当信号关联的所有槽函数执行完毕时,才会执行发射信号后面的代码。