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()";
    });
}
posted @ 2025-05-09 12:01  站着说话不腰疼  阅读(154)  评论(0)    收藏  举报