【Qt】信号和槽简介
信号与槽是 Qt编程的基础,也是 Qt的一大创新。有了信号与槽的编程机制,在 Qt 中处理界面上各个组件的交互操作就变得比较直观和简单。
信号(signal)是在特定情况下被发射的通知,例如QPushButton较常见的信号就是点击鼠标时发射的 clicked()信号。GUI程序设计的主要工作就是对界面上各组件的信号进行响应,只需要
知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。
槽(slot)是对信号进行响应的函数。槽就是函数,所以也称为槽函数。槽函数与一般的 C++
函数一样,可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与信号关联,当信号被发射时,关联的槽函数被自动运行。
将信号和槽关联起来的函数时connect(),其声明如下:
connect(const QObject *sender, const char *signal,const QObject *receiver,
const char *member, Qt::ConnectionType = Qt::AutoConnection);
connect(const QObject *sender, const QMetaMethod &signal,const QObject *receiver,
const QMetaMethod &method,Qt::ConnectionType type = Qt::AutoConnection);
connect(const QObject *sender, const char *signal,const char *member,
Qt::ConnectionType type = Qt::AutoConnection) const;
sender是发射信号的对象的名称;signal是信号,信号可以看作特殊的函数,需要带有括号,有参数时还需要指明各参数类型;receiver是接收信号的对象的名称;slot()是槽函数,需要带有括号,有参数时还需要指明各参数类型。关于信号与槽的使用,有以下一些规则需要注意:
1、一个信号可以连接多个槽函数。
2、多个信号可以连接同一个槽函数。
3、一个信号可以连接另一个信号。
4、信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参如果参数不匹配,会出现编译错误或运行错误。
5、在使用信号与槽的类中,必须在类的定义中插入宏Q_OBJECT。
6、当一个信号被发射时,与其关联的槽函数通常被立即运行,就像正常调用函数一样。只有当信号关联的所有槽函数运行完毕后,才运行发射信号处后面的代码。
QPushButton *button1 = new QPushButton(this);
button1->setText("按钮");
//button1->setParent(this);
button1->move(0,0);
button1->resize(200,100);
connect(button1,&QPushButton::clicked,this,&QWidget::close);
上述代码就是信号和槽的简单实例