Qt自定义信号、带参数的信号、lambda表达式和信号的使用

整个部分知识通过一个跳转窗口的项目来体现
第一个页面

#include "test.h"
#include <qdebug.h>
test::test(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);
    /*
    * &s 信号发出者
    * &subWidget::mySignals 处理的信号,  &发送者类名::槽函数
    * this信号接收者
    * &test::onSubcliked 信号处理函数、槽函数   &接收者类名::槽函数
    */
    //函数指针
  //  void(subWidget:: * mySignals)() = &subWidget::mySignals;
   // connect(&s,mySignals,this,&test::onSubcliked);
  //  void(subWidget:: *mySignals1)(int,QString) = &subWidget::mySignals;
  //  connect(&s, mySignals1, this, &test::displsy);

      //槽函数必须有slots关键字修饰
    //this :类中所有成员以值传递方式
    //&:把外部所有局部变量,引用符号
    connect(&s, SIGNAL(mySignals()), this, SLOT(onSubcliked()));
    connect(&s, SIGNAL(mySignals(int,QString)), this, SLOT(displsy(int, QString)));

    connect(ui.pushButton, &QPushButton::clicked, this, &test::on_pushButton_cliked);

    //lambda表达式 匿名函数对象
    //配合信号使用方便
    connect(ui.pushButton_3, &QPushButton::clicked, 
        // = :把外部所有的局部变量、类中所有成员以值传递方式
        //mutable可变的    [=]() mutable
        [=](bool isCheck)
        {
            ui.pushButton_3->setText("123");
        qDebug() << "dadasa";
        qDebug() << isCheck;
        });
}

test::~test()
{}

void test::on_pushButton_cliked()
{
    this->hide();
    s.show();
}

void test::onSubcliked()
{
    this->show();
    s.hide();
}

void test::displsy(int num, QString s)
{
    qDebug() << num << s;
}

.h文件

#pragma once

#include <QtWidgets/QDialog>
#include "ui_test.h"
#include "subWidget.h"

class test : public QDialog
{
    Q_OBJECT

public:
    test(QWidget *parent = nullptr);
    ~test();
    void on_pushButton_cliked();
    
//槽函数
 private slots:
    void onSubcliked();
    void displsy(int num, QString s);
private:
    Ui::testClass ui;
    subWidget s;
};

第二个页面

#include "subWidget.h"

subWidget::subWidget(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);

	//将按钮和方法链接
	connect(ui.pushButton,&QPushButton::clicked,this,&subWidget::on_pushButton_cliked);
	connect(ui.pushButton_2, &QPushButton::clicked, this, &subWidget::on_pushButton2_cliked);
}

subWidget::~subWidget()
{}

void subWidget::on_pushButton_cliked()
{
	emit mySignals();
}

void subWidget::on_pushButton2_cliked()
{
	emit mySignals(1,"发发大");
}

.h文件

#pragma once

#include <QDialog>
#include "ui_subWidget.h"

class subWidget : public QDialog
{
	Q_OBJECT

public:
	subWidget(QWidget *parent = nullptr);
	~subWidget();
	void on_pushButton_cliked();
	void on_pushButton2_cliked();
signals:
	/*
	* 信号必须有signals关键字声明
	* 信号灭有返回值,但是可以有参数
	* 信号就是函数的声明,只需声明,无需定义
	* 使用:emit mySignals
	*/
	void mySignals();
	void mySignals(int num, QString s);

private:
	Ui::subWidgetClass ui;
};

在这里插入图片描述
跳转到子页面
在这里插入图片描述
点击显示内容 就会打印
在这里插入图片描述
点击返回主页面
在这里插入图片描述
点击lambda表达式
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值