一、基本概念介绍
QT(即Qt)是一个跨平台的C++开发框架,用于创建高性能、可扩展和易于维护的应用程序。QT的核心概念之一就是信号与槽(Signals and Slots)机制。
信号与槽是一种用于对象间通信的机制,通过信号和槽的连接,一个对象可以发出一个信号,而其他对象则通过连接到这个信号的槽来接收并响应该信号。信号和槽可以跨越不同的对象、线程和模块,提供了一种松耦合和灵活的通信方式。
在Qt中,一个类可以定义自己的信号和槽。信号是类内定义的特殊函数,用于向外界发出通知,而槽是接收信号并处理相应事件的函数。通过使用connect()函数,可以将一个信号连接到一个槽上,使得信号被触发时,相关的槽函数会被调用。
二、信号与槽创建图形化方式
2.1方式一
在下面选择信号与槽,点击+号按键
2.2 方式二
三、信号与槽使用代码实现
3.1 自动连接方式
自动生成对应的槽函数
函数widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <iostream>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
函数widget.c
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
std::cout <<"Hello " << std::endl;
}
3.2 QQobject::connect 方式
拖一个btn进来
在widget.cpp自定义一个槽函数
在widget.h中声明出来
在widget.c 中实现出来
最后实现函数
3.3 Lamda表达式
使用表达式进行捕获
QObject::connect(ui->btnlamda,&QPushButton::clicked,[=](){
cout << "3 way to make it" << endl;
});