QObject 介绍

QObject 是 Qt对象模型的核心。该模型的核心特征是具有一种非常强大的无缝对象通信机制,即信号和槽。您可以使用connect ()将信号连接到槽,并使用disconnect ()断开连接。为避免永无止境的通知循环,您可以使用blockSignals ()临时阻止信号。

QObjects 在对象树中组织自己。当你创建一个以另一个对象为父对象的 QObject 时,该对象会自动将自己添加到父对象的children () 列表中。父级获得对象的所有权;即,它会在自己的析构函数中自动删除它的所有孩子。您也可以选择使用findChild () 或findChildren ()按名称查找自己的孩子对象。

每个对象都有一个objectName (),它的类名可以通过相应的metaObject ()方法找到。

当一个对象被删除时,它会发出一个destroy () 信号。您可以捕获此信号以避免对 QObject进行悬空引用。

QObjects可以通过event ()接收事件,并选择性的过滤其他对象的事件。

同样重要的是,QObject 在 Qt 中提供了基本的计时器支持;请参阅QTimer以获得对计时器的高级支持。

还有所有 Qt  widgets都继承 QObject。

QObject 既没有复制构造函数也没有赋值运算符。

线程亲和力

一个 QObject 实例被称为具有线程亲和性,是说它live在某个线程中。当 QObject 接收到排队的信号或发布的事件时,插槽或事件处理程序将在对象所live的线程中运行。

注意:如果 QObject 没有线程亲和性(即如果thread () 返回零),或者如果它存在于没有运行事件循环的线程中,则它无法接收排队信号或发布的事件。

默认情况下,QObject 存在于创建它的线程中。可以使用thread ()查询对象live的线程,并使用moveToThread ()更改对象live的线程。

所有 QObject 必须与其父对象存在于同一线程中。所以有如下约定:

  • 如果涉及的两个 QObject 存在于不同的线程中,setParent () 将失败。
  • 当一个 QObject 被移动到另一个线程时,它的所有子对象也将被自动移动。
  • 如果 QObject 有父对象,则moveToThread () 将失败。
  • If QObjects are created within QThread::run(), they cannot become children of the QThread object because the QThread does not live in the thread that calls QThread::run().

相关函数:

void QObject::moveToThread(QThread *targetThread)

更改此对象及其子对象的线程亲和性。如果对象有父对象,则不能移动它。事件处理将在targetThread 中继续。

要将对象移动到主线程,使用QApplication::instance () 获取指向当前应用程序的指针,然后使用QApplication::thread () 获取应用程序所在的线程。

如果targetThreadnullptr,则此对象及其子对象的所有事件处理都将停止,因为它们不再与任何线程关联。

请注意,该对象的所有活动计时器都将被重置。计时器首先在当前线程中停止,然后在targetThread 中重新启动(以相同的间隔)。因此,在线程之间不断移动对象可以无限期地推迟计时器事件。

一个QEvent::ThreadChange事件在线程亲和性改变之前被发送到这个对象。您可以处理此事件以执行任何特殊处理。请注意,发布到此对象的任何新事件都将在targetThread 中处理,前提是它不是nullptr: 当它是时nullptr,不会发生对该对象或其子对象的事件处理,因为它们不再与任何线程相关联。

警告:这个函数不是线程安全的;当前线程必须与当前线程关联性相同。换句话说,这个函数只能将一个对象从当前线程“推”到另一个线程,它不能从任意线程“拉”一个对象到当前线程。然而,这个规则有一个例外:没有线程关联的对象可以被“拉”到当前线程。

PYQT之- QObject与线程QThread的关系相关推荐

  1. Qt线程QThread详解

    目录 前言 1.QThread介绍 2.QThread示例一 3.QThread示例二 4.线程同步 前言 在程序中使用线程可以提高程序的性能.并发性.响应性和稳定性,使得程序设计更加灵活和简单.但是 ...

  2. CPU的核心数、线程数的关系和区别

    我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面笔者就来解释一下CPU的核心数与 ...

  3. C#/.NET主线程与子线程之间的关系

    以前一直没有在程序中写过总结,再翻开程序时却不知所云,所以我决定写总结         一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程. 有的博客上说"至少 ...

  4. 第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。

    一. 整体说明 揭秘: 通过F12查看Task类的源码(详见下面的截图),发现Task类的构造函数有有一个参数为:TaskCreationOptions类型,本章节可以算作是一个扩展章节,主要就来研究 ...

  5. 进程线程及堆栈关系的总结

    进程线程及堆栈关系的总结 突然想到进程的栈和线程的栈,就顺便说一下,线程的栈被自动分配到进程的内存空间中 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性. ...

  6. 面试题:合适的线程数量是多少?CPU 核心数和线程数的关系?

    合适的线程数量是多少?CPU 核心数和线程数的关系? CPU 密集型任务 首先,我们来看 CPU 密集型任务,比如加密.解密.压缩.计算等一系列需要大量耗费 CPU 资源的任务.对于这样的任务最佳的线 ...

  7. 线程池大小设置,CPU的核心数、线程数的关系和区别,同步与堵塞完全是两码事

    线程池应该设置多少线程合适,怎么样估算出来.最近接触到一些相关资料,现作如下总结. 最开始接触线程池的时候,没有想到就仅仅是设置一个线程池的大小居然还有这么多的学问,汗颜啊. 首先,需要考虑到线程池所 ...

  8. 服务端的网络并发,详细解读网络io与线程进程的关系

    服务端的网络并发,详细解读网络io与线程进程的关系丨后端开发丨C/C++Linux服务器开发丨网络编程丨epoll的实现丨网络编程 视频讲解如下,点击观看: 服务端的网络并发,详细解读网络io与线程进 ...

  9. CPU数,核心数,线程数的关系

    1.CPU数,核心数,线程数的关系 1.存在形式不同: (1)CPU数:独立的中央处理单元,体现在主板上就是有多少个CPU槽位 (2)CPU核心数(CPU cores):在每一个CPU上,都可能有多核 ...

  10. cpu核数和逻辑个数的区别_解释一下CPU的核心数与线程数的关系和区别

    我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与 ...

最新文章

  1. C# xml通过xslt转换为html输出
  2. Android批量打包 如何一秒内打完几百个apk渠道包
  3. 使用面向对象技术创建高级 Web 应用程序
  4. tail将输出的日志放到文件中_如何将Spring Boot应用中日志输出格式改为JSON?
  5. java io面试题_【Java面试】Java常见IO面试题!
  6. EasyUI分页加载datagrid时候报错Uncaught TypeError: Cannot read property 'length' of undefined...
  7. 输出ipv4,ipv6特定段的所有地址,ipv6地址转换成网络字节序
  8. python安装grpcio的心路历程
  9. RISC_V芯片架构
  10. python是高级语言还是低级语言_python学习之高级语言和低级语言
  11. 内网渗透-最实用的横向移动总结
  12. 明天终于要到公司开工了
  13. 在Linux上使用迅雷解决方案xware
  14. 提升新网站优化排名,学会这三个方法就够了
  15. C语言学习必看的N本书-续(一定要看呵)
  16. 专利申请流程及费用,需要准备什么材料,已更新
  17. win10 sdk各种版本下载地址
  18. Redis从生米煮成熟饭
  19. 魔兽世界怀旧服聊天服务器中断,魔兽世界怀旧服世界服务器无法连接
  20. 在Spring中使用JOTM实现JTA事务管理

热门文章

  1. java中的this关键字详解(图示)
  2. [C#] 计算大文件的MD5的两种方式(直接调用方法计算,流计算-适用于大文件)
  3. 微信小程序开发-新闻简讯demo
  4. ListView嵌套ListView优化
  5. 响应式开发(黑马教程笔记)-Bootsrap
  6. python点击网页元素_ios+python 简单的查找页面元素并点击,点击的时候出现问题,求指点...
  7. docker 镜像源_前端 Docker 镜像体积优化
  8. 纳韦斯托克斯方程的推导_这5个改变世界的方程,跟你想的不一样!
  9. react 表单设计器_神器:让你相见恨晚的5个React应用程序库
  10. 处于停机等非正常状态_设备非正常停机管理指导办法