QT C++ 信号与槽连接的4种方式

一.直接UI方式

1.点击NO.1 UI pushbutton按键

2.右键展开选择转到槽

3.选择clicked()

4.会直接跳转到widget.cpp 生成红色框函数体

函数内容是蓝色我自己添加部分

二. QObject::connect方式

QObject::connect(sender,SIGNAL(signal),receiver,SLOT(slot())
eg:
QObject::connect(ui->btnCon,SIGNAL(clicked()),this,SLOT(on_btnCon_clickedMyself()));

三.Lamda表达式方式(用的较少)

QObject::connect(sender,&Sender::signal,[=](){})

eg:

QObject::connect(ui->btnLamda,&QPushButton::clicked,[=](){
        std::cout<<"btnLamdaClick"<<std::endl;
    });

四.函数指针方式

QObject::connect(sender,&Sender:signal,receiver,&Receiver::slot)

eg:

QObject::connect(ui->btnFortch,&QPushButton::clicked,this,&Widget::on_fortch_clicked);

文件夹中收首先含有这几个文件,UI界面如上(数字依次代表方式)

代码合集详解使用方式

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_btnCon_clickedMyself();
    void on_btnui_clicked();
    void on_fortch_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget头文件添加了3个槽函数的声明(可以理解为最终实现的动作)

private slots:
    void on_btnCon_clickedMyself();
    void on_btnui_clicked();
    void on_fortch_clicked();
 

widget.cpp

1.在构造函数中进行信号与槽的绑定

    第2种方式:QObject::connect(sender,SIGNAL(signal),receiver,SLOT(slot())
    QObject::connect(ui->btnCon,SIGNAL(clicked()),this,SLOT(on_btnCon_clickedMyself()));

    第3种方式: QObject::connect(sender,&Sender::signal,[=](){})
    QObject::connect(ui->btnLamda,&QPushButton::clicked,[=](){
        std::cout<<"btnLamdaClick"<<std::endl;
    });

    第4种方式: QObject::connect(sender,&Sender:signal,receiver,&Receiver::slot);
    QObject::connect(ui->btnFortch,&QPushButton::clicked,this,&Widget::on_fortch_clicked);

&Sender是&QPushButton::clicked

&Receiver是&Widget::on_fortch_clicked 没有括号哈

2.注意是Sender还是Receiver,&一般是引用类名

3.绑定完成后再去widget.h添加.cpp定义去写这几个slot

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    //1.在构造函数中进行信号与槽的绑定
    //2.第1种方式:QObject::connect(sender,SIGNAL(signal),receiver,SLOT(slot())
    QObject::connect(ui->btnCon,SIGNAL(clicked()),this,SLOT(on_btnCon_clickedMyself()));

    //3.第2种方式: QObject::connect(sender,&Sender::signal,[=](){})
    QObject::connect(ui->btnLamda,&QPushButton::clicked,[=](){
        std::cout<<"btnLamdaClick"<<std::endl;
    });

    //4.第3种方式: QObject::connect(sender,&Sender:signal,receiver,&Receiver::slot);
    QObject::connect(ui->btnFortch,&QPushButton::clicked,this,&Widget::on_fortch_clicked);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_btnCon_clickedMyself()
{
    std::cout<<"btnClicked"<<std::endl;
}

void Widget::on_btnui_clicked()
{
    std::cout<<"UIBtnClicked"<<std::endl;
}

void Widget::on_fortch_clicked()
{
    std::cout<<"btnFortch clicked"<<std::endl;
}

main.cpp(几乎没动,自己生成的)

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

如内容对你有帮助,可点赞支持博主继续创作哦^O^

(博主最近累bia了,有点子码不动了,鸡血支持)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值