欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Qt自定义信号、带参数的信号、lambda表达式和信号的使用

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

2025/2/23 16:55:21 来源:https://blog.csdn.net/weixin_74239923/article/details/142212871  浏览:    关键词: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_OBJECTpublic: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_OBJECTpublic: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表达式
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词