Qt信号与槽-思维导图-学习笔记

news2024/11/24 22:56:34

Qt 信号与槽

在这里插入图片描述

Qt 信号与槽机制

基本概念

  • 信号与槽机制:Qt 编程的基础与创新,使得处理界面组件交互操作更加直观和简单

  • 信号(Signal):在特定情况下被发射的事件,如按钮点击的 clicked() 信号、组合框项变化的 CurrentIndexChanged() 信号

  • 槽(Slot):对信号响应的函数,像普通的 C++ 函数,可以在类的任意部分定义

信号和槽的关联

  • 关联函数:QObject::connect() 用于将信号和槽关联起来

  • QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

    • connect()是QObject类的一个静态函数而 QObject是所有Qt类的基类在实际调用时可以忽略前面的限定符,所以可以直接写为

      • connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
  • 发送者与接收者:sender 是发射信号的对象,receiver 是接收信号的对象

  • 宏:SIGNAL 和 SLOT 是 Qt 的宏,用于指明信号和槽,并将它们的参数转换为字符串

  • 示例

    • 按钮点击发射 clicked() 信号,窗体的 close() 槽函数将被执行

      • QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(close()));
    • 一个信号可以连接多个槽

      • connect(pushButton, SIGNAL(clicked()), this, SLOT(hide());
        connect(pushButton, SIGNAL(clicked()), this, SLOT(close());
    • 多个信号可以连接同一个槽

      • connect(pushButton,SIGNAL(clicked()),this,SLOT(close()));
        connect(pushButton_2,SIGNAL(clicked()),this,SLOT(close()));
        connect(pushButton_3,SIGNAL(clicked()),this,SLOT(close()));
    • 一个信号可以连接另外一个信号

      • connect(pushButton, SIGNAL(objectNameChanged(QString)),this, SIGNAL(windowTitelChanged(QString)));

规则

  • 参数一致性:信号与槽的参数个数和类型需一致

  • Q_OBJECT 宏:在使用信号与槽的类中,必须在类的定义中加入 Q_OBJECT 宏

  • 执行顺序:当信号发射时,关联的槽函数按建立连接的顺序依次执行,执行完槽函数后,才会执行发射信号处后面的代码

断开连接

  • 基本方法:disconnect() 用于断开信号与槽的连接

  • bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)

  • 可以断开所有连接、特定信号的连接或与指定接收者的连接

如何在项目里创建信号

新建项目

  • 取消勾选 UI 文件

信号声明

  • mianwindow.h 文件:在该文件中声明信号

  • 无需定义:信号只需要声明,无需定义

具体说明

  • 第17-18行:声明信号 void pushButtonTextChanged();,无需 public 等关键字修饰

如何在项目中创建槽

声明槽

  • 在 mainwindow.h 文件中直接声明槽函数

  • 在 mainwindow.cpp 文件中实现槽函数的定义

  • 声明槽时必须同时提供其定义(即函数体的实现),否则编译器会报错

槽的特点

  • 多种形式:槽可以是类的成员函数、普通全局函数、静态函数

  • 参数和返回值:槽函数的参数和返回值必须与对应的信号一致

添加槽函数后的代码

  • mainwindow.h

  • mainwindow.cpp

信号与槽的匹配

  • 由于信号 void pushButtonTextChanged() 无参数且无返回值,故对应的槽函数也必须是 void 类型且无参数

QPushButton 的重载构造函数

  • QPushButton 类提供了多种构造函数形式,如带文本或图标的构造函数,可以根据需要选择使用

如何在项目中连接信号与槽

连接信号与槽的代码

  • 连接按钮点击信号与槽函数

    • connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));
  • 连接自定义信号与槽函数

    • connect(this, SIGNAL(pushButtonTextChanged()), this, SLOT(changeButtonText()));

发送信号的对象和接收信号的对象

  • pushButtonClicked() 是在本类中定义的槽函数,所以用 this 来接收

  • pushButtonTextChanged() 是在本类中定义的信号,所以发送者写成 this

  • changeButtonText() 也是本类的槽函数,所以接收槽的对象也是 this

mainwindow.cpp 实现连接信号槽

信号与槽的匹配

  • 信号 clicked() 由 pushButton 触发

  • 槽函数 pushButtonClicked() 处理 clicked() 信号,并发送 pushButtonTextChanged() 信号

  • 信号 pushButtonTextChanged() 触发槽函数 changeButtonText(),该函数改变按钮文本

实现了当按钮被点击时,按钮的文本发生变化的功能

学会使用 Qt 类的信号与槽

Qt 内置信号与槽

  • Qt 提供了大量的内置信号与槽,这些信号与槽已经预定义好,基本满足开发需求

  • 如果内置信号与槽不能满足特定需求,可以按照自定义信号与槽的方法来定义自己的信号和槽

查找信号与槽

  • 在代码中,可以通过 connect 函数来连接信号与槽

  • connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));

查看信号与槽的定义

  • 在 Qt Creator 中,可以按住 Ctrl 键并点击信号或槽的名称,进入其定义处

  • 在 Qt Creator 中,可以按住 Ctrl 键并点击信号或槽的名称,进入其定义处

使用 Qt 帮助文档

  • 在实际开发中,经常需要使用 Qt 帮助文档来查看 Qt 定义的信号与槽

  • 帮助文档提供了详细的信号与槽信息,包括如何查看和使用这些信号与槽

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务器数据恢复—服务器raid常见故障产生原因数据恢复方案

磁盘阵列(raid)是一种将多块物理硬盘整合成一个虚拟存储的技术。raid模块相当于一个存储管理中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对于单独的物理硬盘&#xff0…

超算互联网-Stable Diffusion 2.1文生图教程

一、名词简介 1. 超算互联网 超算互联网是一种基于云计算的高性能计算平台,用户可以通过互联网接入超级计算资源。它集成了大量的计算节点,提供强大的计算能力,适用于科学计算、深度学习、人工智能等领域。用户可以利用超算互联网平台运行复…

Neural Architecture Search:使用Ultralytics框架进行YOLO-NAS目标检测

Neural Architecture Search:使用Ultralytics框架进行YOLO-NAS目标检测 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行YOLO-NAS目标检测进行预测进行验证 参考文献 前言 由于本人水平有限,难免出现错漏&#xff0c…

旧照片如何修复翻新?这3个方法值得收藏

旧照片如何修复翻新?旧照片的修复翻新是一项既具有挑战性又充满意义的工作。它不仅仅是一个简单的图像处理过程,更是一次穿越时空的旅行,让那些被岁月遗忘的珍贵回忆重新焕发光彩。每一张旧照片都承载着独特的历史和情感价值,通过…

CTF-PWN-web pwn初探

文章目录 参考简介生命周期php扩展模块搭建php扩展模块初始化编写扩展模块编译扩展模块测试 检查调试相关技巧/proc/self/maps泄露php堆PHP 内存管理机制空闲堆块管理示例解释1. 内存分配示例2. 内存释放示例3. tcache poison 攻击 溢出mprotect改栈权限反弹shell 常用phpexp 参…

[Pytorch案例实践008]基于卷积神经网络和通道注意力机制的图像分类实战

一、项目介绍 这是一个蜜蜂、蚂蚁图像分类项目,旨在使用卷积神经网络(CNN)结合SE(Squeeze-and-Excitation)模块进行二分类任务。以下是项目的详细介绍: 项目背景 图像分类是计算机视觉中的一个基本任务&a…

一图看懂数据仓库、数据平台、数据中台、数据湖的内涵和区别!

当大数据平台出现的时候,有人是说这不就是大号的数据仓库吗?当数据中台出现的时候,有人说这不就是数据仓库的进一步包装吗?数据湖的出现更是让很多人陷入困惑。 事实上,数据仓库、数据平台、数据中台、数据湖还是有区别的,不仅…

算法 三

堆 满二叉树:节点满的。 完全二叉树定义:最下层从左往右满,不跳。 下标性质 大根堆:某个节点为根节点,其下的所有结点都小于根节点。 小根堆 重要的变量 heapSize:当前堆的有效节点个数 重要的两个过程…

RCE-无字母数字绕过正则表达式

目录 一、源码展示 二、分析源码 2.1异或运算 2.2或运算 2.3取反运算 一、源码展示 <?php error_reporting(0); highlight_file(__FILE__); $code$_GET[code]; if(preg_match(/[a-z0-9]/i,$code)){die(hacker); } eval($code); 二、分析源码 根据源码&#xff0c;我…

数据治理:国家标准 GB/T 43697-2024《数据安全技术 数据分类分级规则》

按照国家数据分类分级保护有关要求,参照本文件制定本行业本领域的数据分类分级标准规范,重点可明确以下内容: 明确行业数据分类细则,确定数据分类所依据的业务属性,给出按照业务属性划分的数据类别:分析行业领域数据的领域、群体、区域、精度、规模、深度、重要性等分级要素…

设计模式-单一职责模式

DecoratorBridge Decorator 动机 在某些情况下我们可能会 “过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c;使得这种扩展方式缺乏灵活性&#xff1b;并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#xff0c;各种子类的…

基于RK3568+FPGA医用心电监护仪解决方案

医用心电监护仪解决方案 随着我国老龄化速度加快、规模扩大&#xff0c;越来越多民生领域的热点引起民众的关注。庞大的老龄化群体将是一个严峻的问题&#xff0c;各种社会保障政策的实施和各级医疗资源的扩展与升级正在有效化解这一难题。 在这种背景下&#xff0c;医用心电监…

如何构建一个帮助你高效学习编程的完美笔记系统?

在编程学习的过程中&#xff0c;笔记记录是一项至关重要的技能。尤其是在学习Python这样一门功能强大、广泛应用的编程语言时&#xff0c;建立一个高效的笔记系统不仅能帮助你更好地掌握知识&#xff0c;还能提高你的编程效率。那么&#xff0c;如何构建一个帮助你高效学习Pyth…

Java面试八股之消息队列有哪些协议?各种协议有哪些具体实现

消息队列有哪些协议&#xff1f;各种协议有哪些具体实现 消息队列协议是指在消息队列系统中&#xff0c;用于消息的发送、接收和管理的一套通信规则。不同的协议有着不同的特性和应用场景&#xff0c;以下是一些常见的消息队列协议及其具体实现&#xff1a; AMQP (Advanced M…

【leetcode】杨辉三角 、移除元素(Java语言描述)

杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] …

SecureCoding in C and C++(二)

经过上期的环境搭建过后&#xff0c;我们将正式的学习C系列&#xff0c;首先要学习的是C的一些常用的变量 从编译和连接学起似乎也是不错的选择。 个人总结的一句话&#xff1a;编译其实就是对预处理语句进行处理后&#xff0c;然后对语句进行处理。对预处理语句&#xff0c;例…

C++——list列表容器经典案例——手机按销量降序排列,若销量相同则按价格降序排列

需求&#xff1a;使用list列表对商品进行排序&#xff0c;先通过销量降序排&#xff0c;若销量相同则根据价格升序排列输出 涉及到的知识点&#xff1a;list列表容器、自定义数据类型、自定义排序规则 实现步骤&#xff1a; 1&#xff0c;自定义数据类型Product&#xff0c;…

Android 实现多进程通讯(如何实现多进程开发,Binder、AIDL)

目录 1&#xff09;为什么App需要多进程 2&#xff09;什么是多进程开发? 3&#xff09;如何实现多进程开发&#xff1f; 4&#xff09;跨进程间通讯(案例) 5&#xff09;多进程需要注意什么问题&#xff1f; 6&#xff09;多进程的底层原理是什么&#xff1f;【待写】 …

【Python机器学习】树回归——使用Python的tkinter库创建GUI

机器学习给我们提供了一些强大的工具&#xff0c;能从未知数据中抽取出有用的信息。因此&#xff0c;能否这些信息以易于人们理解的方式呈现十分重要。如果人们可以直接与算法和数据交互&#xff0c;将可以比较轻松的进行解释。其中一个能够同时支持数据呈现和用户交互的方式就…

手机IP地址:是根据网络还是设备决定的?

在日益数字化的今天&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。它不仅是我们沟通的桥梁&#xff0c;更是我们获取信息、享受娱乐和完成工作的得力助手。然而&#xff0c;在使用手机上网的过程中&#xff0c;你是否曾经好奇过手机的IP地址是如何被分配的&#xf…