【QT入门】 Qt实现自定义信号

往期回顾:

【QT入门】图片查看软件(优化)-CSDN博客

【QT入门】 lambda表达式(函数)详解-CSDN博客

【QT入门】 Qt槽函数五种常用写法介绍-CSDN博客

 【QT入门】 Qt实现自定义信号

一、为什么需要自定义信号

比如说现在一个小需求,我们想要实现跨ui通信,通俗来说,就是两个ui界面,点击一个ui界面的按钮,让另一个ui界面数据变化。此时我们就要自定义信号和槽来实现。

二、自定义步骤

1、创建两个ui界面,每个ui界面创建一个按钮,并绑定相应的槽函数

这一步相对来说很简单的,其中注意一个点,我们如何在原本项目基础上再创建一个ui:

右键单击项目,选择Add New->Qt->Qt设计师界面类即可

2.实现原界面按钮,出现另一个ui界面 

这一步同样简单,只需要在原界面按钮槽函数里创建另一个ui界面对象即可

void  Widget::on_btnOpen_clicked()
{
    SetDialog dig;
    dig.exec();//事件循环
}

当用户点击btnOpen按钮时,会触发on_btnOpen_clicked()槽函数。在该槽函数中,创建了一个SetDialog对象dig并调用exec()函数来显示对话框。这样做会弹出另一个界面,因为SetDialog类是一个对话框类,通过调用exec()函数来显示对话框界面,从而实现弹出另一个界面的效果。 

3.第三步,也是最重要的一步,点击弹出的ui界面按钮,实现原界面数据变化 

首先需要在弹出ui界面定义一个信号函数,当点击此界面ui时执行该信号函数,也就是发送信号,

void  SetDialog::on_btnAdd_clicked()
{
     static  int value=100;
     emit on_AddOne_clicked(value++);
} 

emit是一个关键字,用于发射(emit)信号。

由于信号的接收方为原ui界面,收到信号后显示数据,所以connect的四个参数明确 

    connect(&dig,&SetDialog::on_AddOne_clicked,[=](int value){

       //用QString的number方法把int类型数据转为QString
       ui->lineEdit->setText(QString::number(value));
    });

这里因为传递的信号有参数,需要把参数带上,虽说lambda表达式的形参数可以小于等于实际参数数,但是我不写报错了,所以建议大家还是写上。

四个参数一一看:分别是

1、信号的发送者:弹出ui界面对象dig
2、发送的信号:执行数据改变的信号函数
3、信号的接收者:原ui界面
4、信号的处理:显示数据在lineEdit上

大家对信号和槽机制多理解,在Qt框架中,信号和槽机制是一种用于在不同对象之间进行通信的机制。当某个事件发生时,一个对象可以发射一个信号,而其他对象可以连接到这个信号并执行相应的槽函数,就是某个事件发生会发射一个信号,其他对象可以连接到这个信号,一旦捕获到这个信号就执行相应得操作(槽函数),这样使得不同对象之间通信及其方便。

最终的代码:

void  Widget::on_btnOpen_clicked()
{
    SetDialog dig;

    connect(&dig,&SetDialog::on_AddOne_clicked,[=](int value){
       ui->lineEdit->setText(QString::number(value));
    });

    dig.exec();
}

调用exec()函数显示窗口,会导致进入事件循环,会阻塞UI,直到对话框关闭为止。
这意味着程序会等待用户对对话框的操作完成后,才会继续执行后面的代码。所以connect必须放在exec()方法执行前面。

我们这里的信号槽是用lambda表达式写的,想一下,如果不用,又该怎么写:

void Widget::on_btnOpen_clicked()
{
     setDialog dig;
     connect(&dig,&setDialog::on_AddOne_clicked,this,&Widget::lineAdd);
    dig.exec();
}

所以为什么说用lambda表达式在槽函数代码量少得情况下很好,因为避免了再去写槽函数这个环节,我不用lambda表达式,我就要自己再写一个槽函数,把实现代码写槽函数里面。

至此,我们就实现了一个简单的自定义信号。


都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/482068.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive入门

什么是hive? - Hive是Facebook开发并贡献给Hadoop开源社区的。它是建立在 Hadoop体系架构上的一层 SQL抽象,使得数据相关人 员使用他们最为熟悉的SQL语言就可以进行海量数据的处理、 分析和统计工作 - Hive将数据存储于HDFS的数据文件映射为一张数据库…

Java程序设计 4、5章 练习题

一、填空题 1.假设有 String s1 "Welcome to Java"; String s2 s1; String s3 new String("Welcome to Java"); 那么下面表达式的结果是什么? (1) s1 s2 ___________true_______________ (2) s1 s3 ______…

SOPHON算能服务器SDK环境配置和相关库安装

目录 1 SDK大包下载 2 安装libsophon 2.1 安装依赖 1.2 安装libsophon 2 安装 sophon-mw 参考文献: 1 SDK大包下载 首先需要根据之前的博客,下载SDK大包:SOPHON算能科技新版SDK环境配置以及C demo使用过程_sophon sdk yolo-CSDN博客 …

第 6 章 ROS-xacro练习(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 6.4.3 Xacro_完整使用流程示例 需求描述: 使用 Xacro 优化 URDF 版的小车底盘模型实现 结果演示: 1.编写 X…

idea使用token方式登录GitHub

总体上分为两大步:1.GitHub生成token。2.idea配置token登录GitHub。 注:idea配置GitHub的前提是本地已经安装了git程序。 一、GitHub生成token 1.登录GitHub 2.进入token创建页面(右上角点击头像–>settings–>页面向下滚动左侧菜单栏…

linux热键,man手册介绍

目录 热键 tab ctrl c ctrl r man 区段 快捷键 热键 tab 可以看到以输入的内容为开头的指令,但无法选择: 当输入的内容匹配到的内容只有一个时,可以自动补全 可以用于输入路径时,自动补全文件名 ctrl c 让当前的程序停掉,可以在 程序或指令出问题而自己无法停止时 使用…

HSP_01章_Python 语言概述

文章目录 06 开发环境安装10 注意事项11 学习方法14 Pycharm 常用快捷键14 Python 常用转义字符15 Python 注释Comment16 [Python 中文文档地址](https://docs.python.org/zh-cn/3.11/) 06 开发环境安装 python 版本命令: python cmd 退出: exit() 环境变量配置: 计算机 > 高…

【Linux】从零认识进程 — 中下篇

送给大家一句话: 人一切的痛苦,本质上都是对自己无能的愤怒。而自律,恰恰是解决人生痛苦的根本途径。—— 王小波 从零认识进程 1 进程优先级1.1 什么是优先级1.2 为什么要有优先级1.3 Linux优先级的特点 && 查看方式1.4 其他概念 2…

如何鉴别真假ZLibrary?2024 ZLibrary最新可用地址,持续更新,2024年在 zlibrary 上发现几本有意思的电子书

之前分享过全网电子书都在这了:ZLibrary 官方通道来了,不再担心找不到最新地址,配合这个脚本简直完美,最新ZLibrary可用地址 zlibrary-sg.se 如何确认一个网站是真的ZLibrary ?存在一个API 接口/eapi/info &#xff0…

pytest全局配置+前后只固件配置

pytest全局配置前后只固件配置 通过读取pytest.ini配置文件运行通过读取pytest.ini配置文件运行无条件跳过pytest.initest_mashang.pyrun.py 有条件跳过test_mashang.py pytest框架实现的一些前后置(固件、夹具)处理方法一(封装)方…

【C++航海王:追寻罗杰的编程之路】stack

目录 1 -> stack的介绍和使用 1.1 -> stack的介绍 1.2 -> stack的使用 1.3 -> stack的模拟实现 1 -> stack的介绍和使用 1.1 -> stack的介绍 stack的文档介绍 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中&#xff0c…

MTransE翻译

MTransE翻译 阅读时间:2024.03.23 领域:知识图谱,知识对齐 作者:Muhao Chen等人 UCLA 出处:IJCAI Multilingual Knowledge Graph Embeddings for Cross-lingual Knowledge Alignment 用于交叉知识对齐的多语言知识图…

基于java+springboot+vue实现的外卖平台系统(文末源码+Lw+ppt)23-568

摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对外卖平台系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套外卖平台系统,帮助商家进…

鸿蒙实战开发-如何通过拖动滑块调节应用内字体大小

介绍 本篇Codelab将介绍如何使用基础组件Slider,通过拖动滑块调节应用内字体大小。要求完成以下功能: 实现两个页面的UX:主页面和字体大小调节页面。拖动滑块改变字体大小系数,列表页和调节页面字体大小同步变化。往右拖动滑块字…

飞企互联-FE企业运营管理平台uploadAttachmentServlet 任意文件上传漏洞

产品简介 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。这个平台可以连接人、链接端、联通内外,支持企业B2B、C2B与O2O等核心需求,为不同行业客户的互联网转型提供支持。其特色在于提供云端…

【软件测试】探索和学习在模型中的软件测试

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-JIGESSc1ecUpVUnH {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

C++初阶---类和对象

目录 1. 类的引入 2. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6.类的实例化 7.类对象模型 8. this指针 8.1 this指针的引出 8.2 this指针的特性 8.3 C语言和C实现栈的对比 9.类的六个默认成员函数 10,构造函数 10.1…

基于springboot+vue的餐饮管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【链表】Leetcode 138. 随机链表的复制【中等】

随机链表的复制 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点…