依附性

Qt对象的依附性,在Qt编程中,默认情况下,对象依附于创建自身的线程,若TestThread对象t它是在main()函数中创建的,那么t依附于主线程,而槽函数在其所依附的线程中被调用执行,因此,槽函数TestThread_Slot()是在main线程中执行

发送信号的线程 和 接收者所依附的线程。而 slot 函数属于我们在main中创建的对象 thread,即thread依附于主线程

  1. 队列连接告诉我们:槽函数在接受者所依附线程执行。即 slot 将在主线程执行
  2. 直接连接告诉我们:槽函数在发送信号的线程执行。信号在那个线程发送呢??不定!
  3. 自动连接告诉我们:二者不同,等同于队列连接。即 slot 在主线程执行

执行线程

QThread 是用来管理线程的,它所依附的线程和它管理的线程并不是同一个东西。

  1. QThread 所依附的线程:就是执行 QThread t(0) 或 QThread * t=new QThread(0)
    的线程。也就是咱们这儿的主线程
  2. QThread 管理的线程:就是 run 启动的线程。也就是次线程

因为QThread的对象依附在主线程中,所以Qthread生成对象的slot函数会在主线程中执行,而不是次线程。

除非:

常规使用

  1. QThread 对象(继承自QThread、不是业务对象)依附到次线程中(通过movetoThread)
  2. 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槽函数运行环境相关推荐

  1. Qt信号发送过快,槽函数处理不过来解决方法

    问题: 跨线程使用信号与槽连接,信号的发送时间间隔小于槽函数处理的时间间隔,造成的问题. 子线程下的槽函数,用sleep来模拟槽函数的耗时操作: void MyThread::myTimeout() ...

  2. Qt学习之信号与槽函数断开:disconnect

    当信号与槽没有必要继续保持关联时,可以使用disconnect函数来断开连接. bool QObject::disconnect ( const QObject * sender, const cha ...

  3. QT源码剖析-QT对象通信机制信号槽的绑定具体实现

    本文详细介绍QT核心机制之一 信号和槽. 我们在此根据Qt源代码一步一步探究其信号槽的实现过程. 核心知识点: 模板元编程技术. Qt moc预编译机制. QObject类. 目录 1. QObjec ...

  4. QT一次性连接多个按钮槽函数

    文章目录 前言 一.使用步骤 1.初始化 2.槽函数 总结 前言 场景:如果QT界面上面有许多按钮,如果一个按钮连接一个信号对应一个槽函数,那么函数太多了,代码结构乱 以下是本篇文章正文内容,下面案例 ...

  5. 函数运行环境系统动态链接库版本太低?函数计算 fun 神助力分忧解难

    背景 最近在处理线上工单的时候,遇到一个用户使用 nodejs runtime 时因为函数计算运行环境的 gcc 版本过低导致无法运行的问题,觉得非常有意思,所以深入的帮用户寻找了解决方案.觉得这个场 ...

  6. Qt信号槽之槽函数中获取发送信号对象——sender()

    QObject::sender() 我们如何在槽函数中获取到信号的发送对象呢,使用sender()方法即可获取.但是使用此方法我们需要注意几点: QObject *QObject::sender() ...

  7. QT之connect的第五个参数(信号与槽的使用)(qt对象树)

    目录 一 .QT connect 第5个参数一般不填,为默认值. 二.信号 三.connect函数原型 四.信号与槽的多种用法 五.槽的属性 一 .QT connect 第5个参数一般不填,为默认值. ...

  8. Qt之信号signals和槽slots详解

    学习到自定义信号和槽的时候经常编译不过去,前边一篇解决了Q_OBJECT编译的问题,这里详细说明了slots和signals. 1.signals前面不可加public.private和protect ...

  9. 【Python_PyQtGraph 学习笔记(四)】基于PyQtGraph设置槽函数,实现保存图片到本地的功能

    基于PyQtGraph设置槽函数,实现保存图片到本地的功能 前言 基于PyQtGraph实现绘图功能后,想要将绘制好的图片保存到本地,PyQtGraph是支持在可视化窗口中右键保存的(Exportin ...

  10. 信号发送,槽函数执行,过程中传递的是对象的引用,涉及的拷贝操作

    如果qt的信号和槽之间发送的是对象的引用,传递过程中会发生拷贝操作. 一.跨线程之间 #ifndef __MAIN_WINDOW_H_ #define __MAIN_WINDOW_H_#include ...

最新文章

  1. img 光盘映像文件已损坏_系统封装||还在用MSDN下载Windows镜像文件?你out了,用这个就可以了...
  2. sql 判断某表是否存在
  3. 测度论相关概念(吐)
  4. windows常用命令netstat
  5. Property or method xxxx is not defined on the instance but referenced during render.
  6. python面向对象之类的成员
  7. WebLogic11g 安装配置规范
  8. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段
  9. iframe页面改动parent页面的隐藏input部件value值,不能触发change事件。
  10. meanShift算法用于目标跟踪的优缺点
  11. 获取邮箱验证码倒计时+PHP发送QQ邮件(未全)
  12. linux配置mac地址命令是什么,Linux环境下如何配置IP地址、MAC地址
  13. SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
  14. 关于LDO和DC-DC,看这一篇就够了!
  15. 柱坐标系与直角坐标系的转换
  16. 2019 小米校招笔试题 小米大礼包
  17. mysql请假表需要什么_课内资源 - 基于JSP和MYSQL数据库实现的请假管理系统
  18. GifCam:有手就会的动图录制神器,GIF专用
  19. 管理服务器维护外包,运维外包管理
  20. 秸秆制粒机的总体设计

热门文章

  1. CSS特效1 - 聚光灯效果
  2. 前端element组件库中el-input密码右侧添加小眼睛切换状态
  3. 因缺思汀的绕过(CTF)
  4. 什么专业跨考计算机不用加试,二战考研:跨专业考研都需要加试吗
  5. 联合创始人应该明确的10个问题
  6. python工程师招聘深圳_日语Python开发工程师
  7. 达摩院CVPR2023人脸重建论文HRN解读——REALY榜单冠军模型
  8. PyCharm 安装 cx_Oracle 失败
  9. 用什么擦地最干净脑筋急转弯_每天10条脑筋急转弯:用什么擦地最干净?
  10. 记应聘:北京童程童美科技有限公司 人工智能编程讲师