QT——对象的依附性、QThread槽函数运行环境
依附性
Qt对象的依附性,在Qt编程中,默认情况下,对象依附于创建自身的线程,若TestThread对象t它是在main()函数中创建的,那么t依附于主线程,而槽函数在其所依附的线程中被调用执行,因此,槽函数TestThread_Slot()是在main线程中执行
发送信号的线程 和 接收者所依附的线程。而 slot 函数属于我们在main中创建的对象 thread,即thread依附于主线程
- 队列连接告诉我们:槽函数在接受者所依附线程执行。即 slot 将在主线程执行
- 直接连接告诉我们:槽函数在发送信号的线程执行。信号在那个线程发送呢??不定!
- 自动连接告诉我们:二者不同,等同于队列连接。即 slot 在主线程执行
执行线程
QThread 是用来管理线程的,它所依附的线程和它管理的线程并不是同一个东西。
- QThread 所依附的线程:就是执行 QThread t(0) 或 QThread * t=new QThread(0)
的线程。也就是咱们这儿的主线程 - QThread 管理的线程:就是 run 启动的线程。也就是次线程
因为QThread的对象依附在主线程中,所以Qthread生成对象的slot函数会在主线程中执行,而不是次线程。
除非:
常规使用
- QThread 对象(继承自QThread、不是业务对象)依附到次线程中(通过movetoThread)
- QThread 对象的slot 和信号是直接连接,且信号在次线程中发射
但上两种解决方法都不好,因为QThread不是这么用的,也就是让我们不要继承Qthread以及添加业务层需要的成员和方法。让Qthread保持其容器的特点。
完美使用
定义一个普通的QObject派生类(在其中定义槽函数,以便槽函数在移动后所依附的线程中执行),然后将其对象move到QThread中。
使用信号和槽时根本不用考虑多线程的存在。也不用使用QMutex来进行同步,Qt的事件循环会自己自动处理好这个。
class Dummy:public QObjectclass Object:public QObjectQThread thread; Object obj; Dummy dummy; obj.moveToThread(&thread); //将obj所依赖的线程移到thread(管理的次线程)中//槽函数将在次线程中运行,即和Object同一个线程QObject::connect(&dummy, SIGNAL(sig()), &obj, SLOT(slot())); thread.start();
QT——对象的依附性、QThread槽函数运行环境相关推荐
- Qt信号发送过快,槽函数处理不过来解决方法
问题: 跨线程使用信号与槽连接,信号的发送时间间隔小于槽函数处理的时间间隔,造成的问题. 子线程下的槽函数,用sleep来模拟槽函数的耗时操作: void MyThread::myTimeout() ...
- Qt学习之信号与槽函数断开:disconnect
当信号与槽没有必要继续保持关联时,可以使用disconnect函数来断开连接. bool QObject::disconnect ( const QObject * sender, const cha ...
- QT源码剖析-QT对象通信机制信号槽的绑定具体实现
本文详细介绍QT核心机制之一 信号和槽. 我们在此根据Qt源代码一步一步探究其信号槽的实现过程. 核心知识点: 模板元编程技术. Qt moc预编译机制. QObject类. 目录 1. QObjec ...
- QT一次性连接多个按钮槽函数
文章目录 前言 一.使用步骤 1.初始化 2.槽函数 总结 前言 场景:如果QT界面上面有许多按钮,如果一个按钮连接一个信号对应一个槽函数,那么函数太多了,代码结构乱 以下是本篇文章正文内容,下面案例 ...
- 函数运行环境系统动态链接库版本太低?函数计算 fun 神助力分忧解难
背景 最近在处理线上工单的时候,遇到一个用户使用 nodejs runtime 时因为函数计算运行环境的 gcc 版本过低导致无法运行的问题,觉得非常有意思,所以深入的帮用户寻找了解决方案.觉得这个场 ...
- Qt信号槽之槽函数中获取发送信号对象——sender()
QObject::sender() 我们如何在槽函数中获取到信号的发送对象呢,使用sender()方法即可获取.但是使用此方法我们需要注意几点: QObject *QObject::sender() ...
- QT之connect的第五个参数(信号与槽的使用)(qt对象树)
目录 一 .QT connect 第5个参数一般不填,为默认值. 二.信号 三.connect函数原型 四.信号与槽的多种用法 五.槽的属性 一 .QT connect 第5个参数一般不填,为默认值. ...
- Qt之信号signals和槽slots详解
学习到自定义信号和槽的时候经常编译不过去,前边一篇解决了Q_OBJECT编译的问题,这里详细说明了slots和signals. 1.signals前面不可加public.private和protect ...
- 【Python_PyQtGraph 学习笔记(四)】基于PyQtGraph设置槽函数,实现保存图片到本地的功能
基于PyQtGraph设置槽函数,实现保存图片到本地的功能 前言 基于PyQtGraph实现绘图功能后,想要将绘制好的图片保存到本地,PyQtGraph是支持在可视化窗口中右键保存的(Exportin ...
- 信号发送,槽函数执行,过程中传递的是对象的引用,涉及的拷贝操作
如果qt的信号和槽之间发送的是对象的引用,传递过程中会发生拷贝操作. 一.跨线程之间 #ifndef __MAIN_WINDOW_H_ #define __MAIN_WINDOW_H_#include ...
最新文章
- img 光盘映像文件已损坏_系统封装||还在用MSDN下载Windows镜像文件?你out了,用这个就可以了...
- sql 判断某表是否存在
- 测度论相关概念(吐)
- windows常用命令netstat
- Property or method xxxx is not defined on the instance but referenced during render.
- python面向对象之类的成员
- WebLogic11g 安装配置规范
- Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段
- iframe页面改动parent页面的隐藏input部件value值,不能触发change事件。
- meanShift算法用于目标跟踪的优缺点
- 获取邮箱验证码倒计时+PHP发送QQ邮件(未全)
- linux配置mac地址命令是什么,Linux环境下如何配置IP地址、MAC地址
- SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
- 关于LDO和DC-DC,看这一篇就够了!
- 柱坐标系与直角坐标系的转换
- 2019 小米校招笔试题 小米大礼包
- mysql请假表需要什么_课内资源 - 基于JSP和MYSQL数据库实现的请假管理系统
- GifCam:有手就会的动图录制神器,GIF专用
- 管理服务器维护外包,运维外包管理
- 秸秆制粒机的总体设计