信号与槽是 Qt 编程的基础。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。
- 信号:就是指在特定情况下被发射的事件,例如ComboBox最常见的信号是选择的列表项变化时的 CurrentIndexChanged() 信号,还有PushButton 按钮常见的信号是鼠标单击时的clicked()信号。
- 槽:就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
- 信号与槽关联是通过 connect() 函数实现的,其基本格式是:
connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));
connect()函数其实是QObject 类的一个静态函数,而 QObject 是所有 Qt 类的基类,在实际调用时可以忽略前面的限定符。
下面我们通过一个案例来了解信号与槽机制:
首先我们在dialog.h文件添加一个按钮和一个槽函数,如
#include <QDialog>
#include <QPushButton>
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog(){};
public slots:
void onBtnClicked();
private:
QPushButton *btn;
};
再到dialog.cpp具体实现方法:
#include "dialog.h"
#include <QDebug>
//需要显示中文时添加
#pragma execution_character_set("utf-8")
Dialog::Dialog(QWidget *parent) :
QDialog(parent)
{
btn = new QPushButton(tr("btn"),this);
connect(btn,&QPushButton::clicked,this,&Dialog::onBtnClicked);
}
void Dialog::onBtnClicked()
{
qDebug() << "你点击了按钮";
}
那么当我们点击按钮后就会在应用程序下输出以下内容: