QT其他线程和UI主线程通信方式

2024-09-05 20:18
文章标签 线程 qt ui 方式 通信 主线

本文主要是介绍QT其他线程和UI主线程通信方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1:为什么会有这个问题:

      其实当我们真正开发一个有实体业务需求的界面软件的时候,就躲不开上面提到的问题——QT其他线程和UI主线程通信。原因是什么,耗时的操作不能再界面ui线程中操作执行,这样会让界面卡死,当然这不仅仅是QT有这个问题,MFC、安卓都是这样的。但现实是你躲不开业务的耗时操作,比如你点击一下按钮,可能按钮对应的底层业务逻辑需要执行一大堆东西,没办法不耗时。当然从另外一个角度看,也就是我们常说的解耦合,界面和后台业务逻辑本来就应该是解耦合的,不应该相互关联,但是解耦合这个东西说起来简单,但其实解耦合后我们又要考虑的问题是通信机制,解耦合不等于不联系。


    在QT中,ui线程不能耗时,那好我们开线程,但是用户的交互是建立在ui线程的,ui线程执行的任何耗时操作都需要传递给我们的其他线程。当然我也好奇的是这么多框架设计对于UI的设计老是单线程的,非常困惑,如果ui界面压根没有耗时操作卡死的问题,这不就非常easy了,这个问题可以看看这篇博客:

https://www.cnblogs.com/findumars/p/5697173.html

lQT中可以通过以下几种方式实现UI线程和其他线程的通信!

2:解决方案:

2.1 信号槽机制

信号槽机制,但是注意哦!相对来说子线程给主线程发送信号相对简单,如果从主线程发给子线程,解决方案是什么,我们下面提到。



2.2事件机制

事件机制也非常简单,分为3步:

1.注册定义自己的事件

2.在ui线程重写事件处理方法

3.子线程发送事件



这篇关于QT其他线程和UI主线程通信方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c