Qt信号和槽的连接方式,connect第五个参数Qt::ConnectionType

2024-01-04 11:32

本文主要是介绍Qt信号和槽的连接方式,connect第五个参数Qt::ConnectionType,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt信号和槽的连接方式

enum Qt::ConnectionType
描述可在信号和槽之间使用的连接类型。特别地,它确定一个特定的信号是立即传递给槽还是排队等待稍后传送。

ConstantValueDescription
Qt::AutoConnection0默认方式,如果接收者位于发出信号的线程中,则使用Qt::DirectConnection。否则,将使用Qt::QueuedConnection。连接类型在发出信号时确定。
Qt::DirectConnection1当发出信号时,将立即调用槽函数。槽函数在发送信号的线程中执行。
Qt::QueuedConnection2当控制权返回到接收者线程的事件循环时,将调用槽函数。槽函数在接收者的线程中执行。
Qt::BlockingQueuedConnection3与Qt::QueuedConnection相同,不同点是发送信号以后发送者线程会阻塞,直到槽函数执行返回。如果发送者和接收者在同一个线程中,则不能使用此连接,否则应用程序将死锁。注意:使用此类型连接同一线程中的对象将导致死锁。
Qt::UniqueConnection0x80此标志可以与上述任何一种连接类型结合使用(使用按位或)。使用此标志时连接方式与Qt::AutoConnection相同。设置Qt::UniqueConnection时,如果连接已存在(即,如果同一信号已连接到同一对对象的同一个槽),则QObject::connect()返回false,连接操作将会失败。

对于队列连接,参数必须是Qt的元对象系统已知的类型,因为Qt需要复制参数以将它们存储在幕后的事件中。如果尝试使用队列连接时收到错误消息:

QObject::connect: Cannot queue arguments of type 'MyType'

在建立连接之前,调用qRegisterMetaType()注册数据类型。

实际应用中遇到过发送一次信号,槽函数多次触发的情况,原因是多次执行了connect()连接函数,连接几次信号和槽,发送信号时槽函数就会执行几次,所以不想多次触发槽函数的话就要记得disconnect(),或者使用Qt::UniqueConnection避免重复连接信号和槽。

Qt::UniqueConnection可以和其他方式混合使用,使用方式:static_cast< Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection)

注意:Qt::UniqueConnection只能用于连接成员函数,不能用于lambda表达式,非成员函数和仿函数。

来源:Qt API

这篇关于Qt信号和槽的连接方式,connect第五个参数Qt::ConnectionType的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569195

相关文章

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计