13.Qt信号与槽的绑定
Qt信号与槽的绑定
在qt当中,用户点击按钮后,我们如何获取到用户真的点击了按钮呢?
当用户点击按钮后,会发出一个clicked的信号,我们可以对这个信号进行监听就可以知道用户点击了按钮,处理这个信号的我们叫槽。
1、信号与槽绑定的方式
1.1、通过ui页面生成
选择指定按钮右键,转为槽

分别在.h文件与.cpp生成对应的函数,槽函数名称是根据按钮的名称生成的on_btnOpen_clicked()
.h
private slots:
void on_btnOpen_clicked();
.cpp
void Widget::on_btnOpen_clicked()
{
//具体的业务实现
}
1.2、通过connect关键字
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
//1.根据信号与槽绑定
connect(ui->btnOpen,SIGNAL(clicked()),this,SLOT(onBtnOpenClicked()));
//2.根据QPushButton按钮类的信号clicked
connect(ui->btnOpen,&QPushButton::clicked,this,&Widget::onBtnOpenClicked);
//3.lambda表达式实现
connect(ui->btnOpen,&QPushButton::clicked,[=](){
onBtnOpenClicked();
});
}
void Widget::onBtnOpenClicked()
{
qDebug() <<"按钮被按下";
}
1.3、自定义类
MyButton(QWidget *parent = nullptr):定义构造函数传入QWidget 类Q_OBJECT:赋予该类具有信号与槽的能力signals:定义信号MyButton::MyButton(QWidget *parent) : QWidget(parent),构造函数实现交由父类实现mousePressEvent:鼠标点击事件emit clilck();:发出定义的信号
mybutton.h
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QWidget>
class MyButton : public QWidget
{
Q_OBJECT
public:
explicit MyButton(QWidget *parent = nullptr);
public:
void mousePressEvent(QMouseEvent *event) override;
signals:
void clilck();
};
#endif // MYBUTTON_H
mybutton.cpp
#include "mybutton.h"
#include <QPaintEvent>
#include <QPainter>
MyButton::MyButton(QWidget *parent) : QWidget(parent)
{
}
void MyButton::mousePressEvent(QMouseEvent *event)
{
emit clilck();
}
widget.cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//使用自定义按钮绑定信号与槽
connect(ui->mybtn,&MyButton::clilck,[](){
qDebug() <<"use clilck()";
});
}

浙公网安备 33010602011771号