当前位置: 首页 > article >正文

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表达式
在这里插入图片描述


http://www.kler.cn/a/312247.html

相关文章:

  • 论软件维护及其应用子问题
  • 网络安全-Linux基础(bash脚本)
  • Ubuntu 的 ROS 操作系统turtlebot3环境搭建
  • go do sth和come do sth的区别
  • 基于python 的opencv 使用GrabCut算法分割图像代码
  • 计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
  • elemntui el-switch 在表格内改变状态失败,怎么复原???
  • 一文读懂SpringCLoud
  • 【RabbitMQ 项目】服务端数据管理模块之交换机管理
  • prometheus监控linux虚拟机
  • 操作系统迁移(CentOs -> Ubuntu)
  • Wacom 和 Splashtop 携手共赴 IBC 2024 展会,宣布向欧洲市场隆重推出 Wacom Bridge
  • XSS漏洞挖掘利用总结(附个人常用payload)
  • MyBatis 分批次执行(新增,修改,删除)
  • ROS激光雷达介绍
  • WPF中图片的宫格显示
  • TPDO触发条件如何满足?
  • AI学习指南深度学习篇-Adam的Python实践
  • 如何配置和使用自己的私有 Docker Registry
  • python的6种常用数据结构
  • 3.大语言模型LLM的公开资源(API、语料库、算法库)
  • Python中的树与图:构建复杂数据结构的艺术
  • 图论三元环(并查集的高级应用)
  • 天润融通创新功能,将无效会话转化为企业新商机
  • 青柠视频云——视频丢包(卡顿、花屏、绿屏)排查
  • Python 集合的魔法:解锁高效数据处理的秘密