信号与槽是Qt中的核心,也是Qt的特有的。在Qt中信号与槽的关键字为slots、signals、emit。
具体信号与槽将会在下一节中详细说明,因为担心一些读者在没了解过槽与信号前直接讲述过深导致门槛提高,阅读困难,所以当前这一篇文将在不理解信号与槽的实现原理下,完成点击按钮并弹窗,感受信号与槽的使用。
创建一个Qt Widget项目,双击Forms下的mainwindow.ui,在弹出的UI 设计面板小部件选择区域,拖拽Push Button 至窗体设计面板中:
拖拽完成后的界面如下:
右键 PushButton 选择转到槽:
之后弹出转到槽面板,选择QAstractButton下的clicked():
这时将会跳转至一个方法中:
以上操作使按钮绑定了一个方法,这个方法可以称作为槽,槽则是对信号响应的函数。槽可以使该函数与一个信号关联,信号发射时,槽函数会响应,执行槽函数。
刚刚我们在槽面板下选择的是QAstractButton下的clicked(),那么clicked则是发送的信号。clicked是当该按钮被点击后发送的信号。
综上所述,我们可以得知槽是一个函数,当一个信号发射时,将会执行绑定的槽。
我们可以在该槽函数中编写某些代码检测是否在 PushButton被点击时,该函数将会响应。
我们尝试使用一个弹窗作为槽函数的一个表现。可以在 mainwindow.cpp 文件的头部,引入弹窗的头文件:
#include <QMessageBox>
在槽函数中添加 QMessageBox 弹窗(QMessageBox为弹窗),QMessageBox 的函数原型如下:
static StandardButton QMessageBox::information ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );
- parent:为父部件 类型为 QWidget
- title:为弹窗标题 类型为 QString
- text:为显示内容 类型为 QString
- buttons :为弹窗有一个默认的按钮为OK 如果想显示一个OK和NO可以写为
QMessageBox::Yes | QMessageBox::No
类型为 StandardButton - defaultButton:为默认选中的按钮 NoButton 则为不选中 类型为 StandardButton
有了以上说明,我们可以在槽函数中添加如下代码(直接填入值不需要在参数里面进行赋值):
QMessageBox::information(NULL, "这是标题", "@1_bit", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
以上代码服部件为NULL,标题值为“这是标题”,内容为“@_bit”,弹窗有2个按钮,一个是Yes一个是No,默认选中Yes。
点击运行查看效果:
可能读者在设置显示值时会出现编码问题,导致显示某些值错误,在后面的章节将会说明。
完整代码截图如下,紫色框选区域为我添加的代码: