信号和槽
信号与槽(Signal & Slot)是 Qt 编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。它可以让应用程序编程人员把这些互不了解的对象绑定在一起。
信号(Signal)
信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的 CurrentIndexChanged() 信号。
GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。
槽(Slot)
就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
信号与槽关联是用 QObject::connect() 函数实现的,其基本格式是:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
参数1、信号的发送者
参数2、发送的信号
参数3、信号的接收者
参数4、处理函数(槽函数)
现在我们在Widget类中加上一个QPushButton按键,这时我们在QT程序中点击这个按键控件是没有反应的,现在我们希望点击该按键,可以将窗口关闭,那么我们就得给它们建立信号和槽的联系:
首先是QPushButton类:在它的父类中,我们发现它有这么一个函数:void checked(),这就是一个信号,点击后触发的信号;
接着是Widget类:在这个类中也有这么一个函数:bool close(),这就是槽,也可以理解为响应函数。
当有了信号和槽,我们就可以建立起它们之间的联系了:
connect(btn,&QPushButton::clicked,this,&Widget::close);//btn是一个QPushButton对象
注意信号和槽是需要在前面加上‘&’的。
在我们运行后,点击该按钮,就可以关闭窗口了
本来没有连接的两个对象,连接在一起。本来点击按钮,跟关闭窗口没有联系,我们可以同connect让他们建立起联系。