Qt(一)概念 信号与槽

news2024/10/1 12:20:06

文章目录

  • 一、概念
    • (一)Qt工具
      • 1. Assistant:帮助手册
      • 2. Designer:Qt设计师
      • 3. xxx.uic文件
      • 4. rcc资源文件
      • 5. moc:元对象编译器
      • 6. qmake
      • 7. Qtcreator:集成化的开发软件
    • (二)创建第一个Qt程序
      • 1. 参考文档
      • 2. 影子构建
      • 3. xxx.pro
      • 4. main.cpp
      • 5. xxx.h
      • 6. xxx.cpp
    • (三)工程文件说明
    • (四)Qt标准类
  • 二、 信号和槽机制
    • (一)使用
      • 1. 设计界面
      • 2. 使用提供的信号函数和槽函数
        • (1)
        • (2)通过函数实现
    • (二)自定义信号和槽
      • 1. 自定义信号和槽
      • 2. 使用示例
    • (三)信号函数与槽函数总结

一、概念

Qt是一个跨平台基于C++图形用户界面应用程序开发框架

(一)Qt工具

1. Assistant:帮助手册

在这里插入图片描述

2. Designer:Qt设计师

通过设计师生成的文件的后缀名为xxx.ui
在这里插入图片描述

3. xxx.uic文件

将ui界面编译成C++的文件格式

4. rcc资源文件

5. moc:元对象编译器

信号和槽

6. qmake

xxx.pro文件生成

7. Qtcreator:集成化的开发软件

(二)创建第一个Qt程序

1. 参考文档

2. 影子构建

3. xxx.pro

4. main.cpp

5. xxx.h

6. xxx.cpp

(三)工程文件说明

(四)Qt标准类

QObject:这是Qt中所有对象的基类。Qt中的很多类都继承自QObject,以利用Qt的信号与槽机制、对象树和属性系统等特性。

QWidget:它是Qt中所有用户界面对象的基类。QWidget提供了用户界面的基本功能,如大小、位置、字体和样式等。QWidget继承自QObject,因此它可以使用Qt的信号与槽机制等特性。

QFrame:它是QWidget的一个子类,专门用于提供一个带有边框和可选背景的框架。QFrame继承了QWidget的所有功能,并增加了边框和背景相关的属性。

二、 信号和槽机制

信号和槽机制是一种手段,是一种通信机制,发生子两个组件或者两个组件以上的通信;
信号和槽本质上就是函数,因此可以称为信号函数和槽函数

可以使用提供的信号函数和槽函数,也可以使用自定义的信号函数和槽函数
提供的信号函数通过‘转到槽’进行选择即可,但是提供的槽函数需要自定义;

(一)使用

信号/槽机制在QObject类中实现
QWidget 是Qt中所有用户界面对象的基类,它本身继承自 QObject 类。而 QObject 类是Qt对象模型的核心,它提供了对象树、事件处理、属性系统、对象间通信(包括信号和槽)等核心功能

1. 设计界面

  1. 需求:有两个按钮,一个按钮负责关闭label控件,另一个负责关闭父窗口
  2. 将需要的组件拖到工作区
  3. 修改要修改的组件属性:
    修改组件objectName、文本、字体和大小
    修改父窗口大小
    修改标题windowTitle
  4. 布局(美观)

2. 使用提供的信号函数和槽函数

(1)

第一步:设计界面下方
在这里插入图片描述

第二步:添加信号和槽

(2)通过函数实现

(二)自定义信号和槽

1. 自定义信号和槽

  1. 自定义信号函数
    自定义的信号函数只有声明,没有定义
    emit 自定义的信号函数

  2. 自定义槽函数
    自定义的槽函数既要声明也要定义

返回值类型 
  1. 用于信号函数和槽函数连接:connect

  1. 用于信号函数和槽函数断开:disconnect
[static]

2. 使用示例


  • 注:

(三)信号函数与槽函数总结

1.信号函数和槽函数的形参类型和个数要求一致(使用比较多)
  QObject::connect(发送者,SIGNAL(on_custom_signals()),接收者,SLOT(on_custom_slot()));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals(int)),接收者,SLOT(on_custom_slot(int)));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals(int,char)),接收者,SLOT(on_custom_slot(int,char)));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals(int,char)),接收者,SLOT(on_custom_slot(char,char)));  //error
  
2.信号函数的参数个数可以比槽函数的形参个数多(使用比较少)
   QObject::connect(发送者,SIGNAL(on_custom_signals(int,int)),接收者,SLOT(on_custom_slot(int)));  //ok
   QObject::connect(发送者,SIGNAL(on_custom_signals(int)),接收者,SLOT(on_custom_slot(int,int)));  //error
    
3.槽函数的形参个数一般不可以比信号函数多
  如果槽函数的形参个数比信号函数的形参个数多,可以给槽函数的形参添加缺省值
  QObject::connect(发送者,SIGNAL(on_custom_signals(int)),接收者,SLOT(on_custom_slot(int,int)));  //error
  //想要上面的连接函数成立的话,必须要给槽函数的形参添加缺省值
  QObject::connect(发送者,SIGNAL(on_custom_signals(int)),接收者,SLOT(on_custom_slot(int,int = 缺省值)));  //ok
  
4.一个信号函数可以对应多个槽函数(使用比较多)
  QObject::connect(发送者,SIGNAL(on_custom_signals()),接收者,SLOT(on_custom_slot1()));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals()),接收者,SLOT(on_custom_slot2()));  //ok
5.多个信号函数可以对应同一个槽函数(使用比较多)
  QObject::connect(发送者,SIGNAL(on_custom_signals1()),接收者,SLOT(on_custom_slot()));  //ok
  QObject::connect(发送者,SIGNAL(on_custom_signals2()),接收者,SLOT(on_custom_slot()));  //ok
  • 注:
  • 当连接信号和槽时,它们的参数列表(包括参数的数量、类型和顺序)必须兼容。槽函数的参数类型必须能够接收信号发送的数据类型,或者信号发送的数据类型可以被隐式转换为槽函数期望的参数类型
  • 在Qt框架中,当对象的状态发生变化时,它可以通过发送信号来通知其他可能对此变化感兴趣的对象。发送信号的对象(称为信号的发射者)并不关心是否有其他对象接收(或监听)这个信号,也不关心有多少个对象接收了这个信号。

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

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

相关文章

C 语言中的联合(Union)的用途是什么?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 📙C 语言百万年薪修炼课程 通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。 文章目…

飞速(FS)10G光模块选择指南

飞速(FS)的10G SFP光模块专为万兆每秒(10 Gbps)的数据传输设计,满足多样化网络需求。该光模块支持多种传输距离,具备热插拔和数字诊断监控功能,全面适配200品牌,为客户提供更灵活的选…

智慧灌区信息化系统完整解决方案

一、背景 随着科技的快速发展,智慧灌区信息化系统正逐渐成为提高农业灌溉效率、优化水资源配置的重要手段。本文将详细介绍智慧灌区信息化系统的完整解决方案,包括系统、功能、应用以及优势分析等方面,旨在为灌区的现代化和高效管理提供有力…

clickhouse-jdbc-bridge rce

clickhouse-jdbc-bridge 是什么 JDBC bridge for ClickHouse. It acts as a stateless proxy passing queries from ClickHouse to external datasources. With this extension, you can run distributed query on ClickHouse across multiple datasources in real time, whic…

爆破器材期刊

《爆破器材》简介   《爆破器材》自1958年创刊以来,深受广大读者喜爱,是中国兵工学会主办的中央级技术刊物,在国内外公开发行,近几年已发行到10个国家和地区。《爆破器材》杂志被美国著名检索机构《化学文摘》(CA&a…

Spin Image(旋转图像)

Spin Image特征描述子原理 Spin Image是Johnson于1999年提出,Lazebnik于2005年完善的基于点云空间分布的特征描述方法,其思想是将一定区域的点云分布转换成二维的Spin Image,然后对场景和模型的Spin Image进行相似性度量。Spin Image方法与通…

数据结构--二叉树收尾

1.二叉树销毁 运用递归方法 分类: 根节点左子树右子树(一般都是这个思路,不断进行递归即可) 选择方法(分析): 前序:如果直接销毁根就无法找到左子树右子树 中序:也会导致丢失其…

Linux|背景 环境搭建

目录 一、简述Linux发展史 1.1计算机的诞生 1.2操作系统的诞生 1.3Linux操作系统开源 1.4Linux发行版本 二、搭建Linux环境 三、使用shell远程登入到Linux 一、简述Linux发展史 可能大家未听说过Linux,或者只知道它是一个搭配在计算机上的操作系统&#xff0…

详细谈谈负载均衡的startupProbe探针、livenessProbe探针、readnessProbe探针如何使用以及使用差异化

文章目录 startupProbe探针startupProbe说明示例配置参数解释 使用场景说明实例——要求: 容器在8秒内完成启动,否则杀死对应容器工作流程说明timeoutSeconds: 和 periodSeconds: 参数顺序说明 livenessProbe探针livenessProbe说明示例配置参数解释 使用…

OpenCV MEI相机模型(全向模型)

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 对于针孔相机模型,由于硬件上的限制(如进光量等),他的视野夹角往往有效区域只有140度左右,因此就有研究人员为每个针孔相机前面再添加一个镜片,如下所示: 通过折射的方式增加了相机成像的视野,虽然仍然达不…

RequestContextHolder多线程获取不到request对象

RequestContextHolder多线程获取不到request对象,调用feign接口时,在Feign中的RequestInterceptor也获取不到HttpServletRequest问题解决方案。 1.RequestContextHolder多线程获取不到request对象 异常信息,报错如下: 2024-07-0…

光学传感器图像处理流程(一)

光学传感器图像处理流程(一) 1. 处理流程总览2. 详细处理流程2.1. 图像预处理2.1.1. 降噪处理2.1.2. 薄云处理2.1.3. 阴影处理 2.2. 辐射校正2.2.1. 辐射定标2.2.2. 大气校正2.2.3. 地形校正 2.3. 几何校正2.3.1. 图像配准2.3.2. 几何粗校正2.3.3. 几何精…

深入了解线程锁的使用及锁的本质

文章目录 线程锁的本质局部锁的使用 锁的封装及演示线程饥饿问题 线程加锁本质可重入和线程安全死锁问题 根据前面内容的概述, 上述我们已经知道了在linux下关于线程封装和线程互斥,锁的相关的概念, 下面就来介绍一下关于线程锁的一些其他概念. 线程锁的本质 当这个锁是全局的…

5.更多

发现一个项目与 MkDocs 类似的项目 PyMdown 拓展文档 ,等待探索。 1.排版模仿 以下网站使用 MkDocs 构建 Material for MkDocs 的美化 - Charles Les Notebook (charleschile.com) Documentation - Home Assistant (home-assistant.io) Godot Docs – master bra…

什么是数据同步服务RSYNC?

大家好呀!这里是码农后端。今天来介绍一下数据同步服务RSYNC,作为Linux/Unix系统中远程或本地复制同步(复制)文件和目录最常用的命令,相比于scp命令,其具有增量备份、数据同步时保持文件的原有属性等优点。…

[激光原理与应用-102]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 6 - 激光焊接系统的组成

目录 一、激光焊接系统的组成概述 1.1、核心部件 1.2、焊接执行部件 1.3、辅助系统 1.4、控制系统 1.5、其他辅助设备 二、激光器 2.1 按出光类型分 1. 脉冲激光器 2. 连续激光器 3. 准连续激光器(QCW) 4. 其他常见激光器 5. 应用领域 2.2…

CentOS6禁止锁屏

在电源中设置后还是会锁屏, 原因是有屏幕保护程序 电源管理都 “从不” 一些AI的回答 在CentOS 6系统中,如果你想要禁用锁屏功能,可以编辑/etc/kbd/config文件。这个文件通常包含了键盘相关的设置,包括密码策略和屏幕锁定选项。 首先打开终…

昇思14天

ResNet50图像分类 1. ResNet50图像分类概述 ResNet50是一种用于图像分类的深度卷积神经网络。图像分类是计算机视觉的基本应用,属于有监督学习范畴。ResNet50通过引入残差结构,解决了深层网络中的退化问题,使得可以训练非常深的网络。 2. …

List、Map、Set 接口在Java中的存取元素特点

List、Map、Set 接口在Java中的存取元素特点 1、List 接口2、Map 接口3、Set 接口4、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,List、Map和Set是三个最常用的集合接口。它们各自有不同的特点和用途&#xff…

实践致知第12享:如何新建一个Word并设置格式

一、背景需求 小姑电话说:要新建一个Word文档,并将每段的首行设置空2格。 二、解决方案 1、在电脑桌面上空白地方,点击鼠标右键,在下拉的功能框中选择“DOC文档”或“DOCX文档”都可以,如下图所示。 之后&#xff0…