目录
1. 信号槽的概念
如果让按钮能在用户点击后执行某个代码,就需要用到Qt中的信号槽机制。
信号槽是Qt基于C++语法上新增的特性,可以实现对象之间的通信,形成一定因果关系。
使用信号槽的对象需要具备两个条件:
- 通信的对象必须继承自QObject
- 类中要有Q_OBJECT宏
2. 函数原型
QObject类是所有Qt对象的基类,此类中有一个静态成员函数connect,用于连接信号槽之间的因果关系,函数原型如下:
参数1:发射者,通信的对象,此对象是信号槽触发的来源,例如:按钮对象(n.)
参数2:信号函数,使用SIGNAL()包裹,表示发射者触发的效果,例如:点击(v.)
参数3:接收者,通信对象,此对象是执行结果代码的主体(n.)
参数4:槽函数,使用SLOT()包裹,表示接收者要执行的函数(v.)
为了方便讲解各种场景下使用信号槽的不同方式,分别使用三种类型进行讲解:
- 自带信号 → 自带槽
- 自带信号 → 自定义槽
- 自定义信号 → 槽函数
2.1 自带信号 → 自带槽
这是最简单的一种连接方式,因为信号函数和槽函数都在Qt中预设了,只需要通过connect函数“连线”即可。
【例子】点击按钮,关闭窗口。
分析:
参数1,按钮对象;
参数2,点击函数;
参数3,窗口对象;
参数4:关闭函数。
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPushButton>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
private:
QPushButton* btn;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
resize(300,300);
btn = new QPushButton("关闭",this);
btn->move(100,100);
// 参数1,按钮对象 btn