QObject【详细描述】

QThread 与 QObject的关系 Threads and QObjects QThread 继承 QObject.。它可以发送started和finished信号,也提供了一些slot函数。 QObject.可以用于多线程,可以发送信号调用存在于其他线程的slot函数,也可以postevent给其他线程中的对象。之所以可以这样做,是因为每个线程都有自己的事件循环。 在进行下面的讲解之前,应该了解的重要的一点是:QThrea 阅读详情

QObject 是 Qt 的核心,核心特征是强大的无缝对象通信机制 signals and slots(信号与槽)。

用户可以使用  connect() 将信号连接到槽,也可以使用disconnect() 断开连接。为避免无止境的通知循环,还可以使用 blockSignals()暂时阻止信号。受保护函数connectNotify()和 disconnectNotify() 可以跟踪连接。


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


每个对象都有一个 objectName(),它的类名可以通过相应的 metaObject() 找到(参见QMetaObject::className())。您可以使用 inherits() 函数确定对象的类是否继承 QObject 继承层次结构中的另一个类。


当对象被删除时,它会发出 destroyed() 信号,可以捕获此信号以避免对 QObjects 的悬空引用。


QObjects 可以通过 event() 接收事件,并过滤其他对象的事件(参阅 installEventFilter() and eventFilter())。可以重新实现 childEvent() 以捕获子事件。


QObject 还在 Qt 中提供了基本的定时器QTimer 支持。


 注意 

对于实现信号、槽或属性的任何对象, Q_OBJECT 宏都是必需的。您需要在源文件上运行 Meta Object Compiler。强烈建议在 QObject 的所有子类中使用此宏,无论它们是否实际使用信号、插槽和属性,因为如果不这样做可能会导致某些函数表现出奇怪行为。


所有 Qt 控件都继承了 QObject。isWidgetType() 函数返回对象是否实际上是控件。它比qobject_cast<QWidget *>(obj) 或 obj->inherits("QWidget") 快得多。

某些 QObject 函数(例如 children())返回 QObjectList,这是 QList<QObject *>的类型定义 。


 线程亲和性 Thread Affinity 

  线程亲和性  能够强制使你的应用线程运行在特定的一个或多个cpu上。通过这种方式,可以消除操作系统进行调度过程导致线程迁移所造成的影响。

QObject 实例被具有线程亲和性,当 QObject 收到一个 queued signal 或一个posted event,槽或事件处理程序将在对象所在的线程中运行。

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

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

  所有 QObject 必须与其父级位于同一线程中。因此:

  • setParent()  如果涉及的两个 QObject 位于不同的线程中,则将失败。
  • 当一个 QObject 移动到另一个线程时,它的所有子线程也将自动移动。
  • 如果 QObject 有父级,则 moveToThread()  将失败。
  • 如果 QObject 是在QThread::run()中创建的,则它们不能成为 QThread 对象的子对象,因为QThread 不存在于调用  QThread::run() 的线程中。

 注意 

QObject 的成员变量不会自动成为其子变量。父子关系必须通过传递指向子项的指针或调用  constructor来设置。如果没有此步骤,则在调用  setParent() 时,对象的成员变量将保留在旧线程中。


  无复制构造函数或赋值运算符  

QObject 既没有复制构造函数,也没有赋值运算符,这是设计使然。实际上,它们是声明的,在宏 Q_DISABLE_COPY() 的部分中。事实上,所有从QObject派生的Qt类(直接或间接)都使用这个宏来声明它们的复制构造函数和赋值运算符是私有的。

参见: Identity vs Value 和 Object Model 

因此您应该使用指向 QObject(或指向 QObject 子类)的指针,否则您可能试图将 QObject 子类用作值。例如,如果没有复制构造函数,您不能使用 QObject 的子类作为要存储在其中一个容器类中的值。您必须存储指针。


 自动连接 

Qt的元对象系统提供了一种机制,可以在QObject子类及其子类之间自动连接信号和插槽。只要使用合适的对象名称定义对象,并且槽遵循简单的命名约定,就可以在运行时由 QMetaObject::connectSlotsByName() 函数执行此连接。

User Interface Compiler (uic ) 生成调用此函数的代码,以启用在使用Qt Designer 创建的表单上的控件之间执行自动连接。有关使用Qt Designer自动连接的更多信息,请参阅Using a Designer UI File in Your Application s。


 动态属性 

从Qt 4.2开始,动态属性可以在运行时添加到QObject实例中,也可以从QObject实例中删除动态属性。动态属性不需要在编译时声明,但它们提供了与静态属性相同的优点,并且使用相同的 API 进行操作 - 使用 property() 读取它们,使用 setProperty()  写入它们。

从Qt 4.3开始,动态属性由 Qt Designer支持,并且标准Qt控件和用户创建的form都可以被赋予动态属性。


 国际化 (I18n) 

所有QObject子类都支持Qt的翻译功能,从而可以将应用程序的用户界面翻译成不同的语言。

若要使用户可见的文本可翻译,必须将其包装在对  tr() 函数的调用中。 Writing Source Code for Translation 文档中对此进行了详细解释。

另请参见  QMetaObject, QPointer, QObjectCleanupHandler, Q_DISABLE_COPY(), and Object Trees & Ownership.


 <<<返回根页面

【Qt初入江湖】Qt QObject 底层架构、原理详细描述 元对象是在编译期间自动生成的,其中包含了类的信息、信号和槽的信息等。QObject 的元对象是通过 Q_OBJECT 宏自动生成的,它包含了类的元信息和信号槽的信息。对象的创建和销毁:QObject 的对象管理机制是通过 QGlobalStatic 类实现的,它维护了全局的对象列表和 QObjectPrivate 类实例。QObject 的底层代码架构是一个包含了许多类和机制的庞大系统,其中涉及到对象的创建和销毁、信号和槽机制、元对象系统、事件处理等方面。 阅读详情

相关推荐

Qt入门教程【QObject篇】QObject类

QObject类

小鱼酱的博客 3659

Q_OBJECT的作用

只有继承了QObject类的类,才具有信号槽的能力。所以,为了使用信号槽,必须继承QObject。凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT。不管是不是使用信号槽,都应该添加这个宏。这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。因此,如果你觉得你的类不需要使用信号槽,就不添加这个宏,就是错误的。其它很多操作都会依赖于这个宏。 注意,由于 moc 只处理头文件中的标记了Q_OBJECT的类声明,不会处

u011555996的博客 9382

【Qt中文手册】QObject

Qt几乎所有的类都是从QObject直接或间接继承的,但是你真的了解QObject吗?下面先看看QObject在官方手册中的介绍。 一、QObject简介 1、信号和槽 QObject是所有Qt类的基类,是Qt对象模型的核心。该模型的核心功能是信号和槽的通信机制(有吐槽Qt信号和槽的,个人建议不要用Qt,因为这是它的核心功能)。 创建信号和槽的连接:connect() 销毁连接:disconnec...

郭老二 1万+

Qt之Q_OBJECT 宏的神奇之旅

Qt之Q_OBJECT 宏的神奇之旅

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4582

GPS数据处理必备:IGS精密星历下载与使用全攻略(附武汉大学/CDDIS/CODE/GFZ地址)

本文为GPS/GNSS数据处理者提供了IGS精密星历的完整下载与使用指南。详细解析了最终、快速、超快速三种精密星历产品的区别与选择策略,并手把手教学如何从武汉大学、CDDIS、CODE、GFZ四大主流数据中心高效获取数据,涵盖文件命名规则解析及自动化下载脚本,助力科研与工程应用。

weixin_29234239的博客 683

ArcGIS小白必看:5分钟搞定shp矢量文件分割(附常见错误排查)

本文为ArcGIS新手详细解析了分割shp矢量文件的四种核心方法:裁剪工具、分割工具、按属性选择导出及ArcPy脚本自动化。重点强调了投影匹配等关键步骤,并提供了常见错误排查指南,帮助用户快速掌握矢量数据分割技巧,提升GIS数据处理效率。

h9j8k7l6m5n的博客 798

教你学习QT -- 深入理解QObject类

QObject是一个类,是QT所有类的父类。QObject作为QT中比较核心的基类,其作用是非常大的,并且其的属性成员函数能实现的功能也是非常多,非常复杂的。在学习QT底层框架时了解这个类是不可少的。以下是把这个类的功能、以及属性成员的函数功能都来介绍一遍。这样在使用其它继承这个类的类时,能够更好的理解。(1)QObject是QT对象模型中核心的角色。最重要的特性是有一个强大的机制,这个机制可以无缝的进行对象之间的通信(我们所说的信号与槽)。就是说,QObject这个类引入了信号与槽的机制。可以使用。

shenlaoli的博客 7259

Oracle数据库安装及配置(Oracle19c)

Windows 10安装Oracle 19c教程

weixin_69200200的博客 2万+

QObject类介绍

作为所有Qt类的基类,QObject提供了信号槽机制、对象树、动态属性、元对象系统、事件处理机制、线程安全、国际化等许多重要特性,这些特性可以帮助开发者轻松实现模块间通信、组件化、程序设计以及事件处理等方面的功能。在Qt框架下编程,不管用不用到Qt的特性,都推荐自定义类继承QObject类,这样在需要的时候,就可以随时使用Qt基于QObject类提供的各种特性和机制,而且可以让自定义的类很好地融入到Qt的框架之中。QObject用得好,可以做很多需要运行时动态处理的工作,大大地提高程序的灵活性。

zw_ggr_2017的博客 3593

天融信防火墙NGFW4000(TG-4628)安装配置笔记

配置一台全新的天融信防火墙NGFW4000,配置完后,内网用户10.10.1.0/24和10.10.2.0/24可以通过防火墙上网,外网用户可以通过访问防火墙的外网接口地址来访问内网的WEB服务器10.10.1.200,并且内网用户也可以通过WEB服务器的外网地址进行访问。 网络说明: 防火墙外网接口地址:218.90.123.121/30 防火墙内网接口地址:19...

weixin_33671935的博客 4455

多模型动态路由(Fusion):从“算力霸权”到“架构分权”的工程范式转型

多模型动态路由(Multi-Model Dynamic Routing)是指在多个大语言模型之间,根据请求特征、资源约束和业务目标,动态选择最优模型或模型组合的技术范式。传统网关擅长管理请求流量,但不理解“任务类型”。而AI路由层需要对每个请求进行语义理解、能力匹配和成本评估。从“算力霸权”到“架构分权”,这不是技术的线性演进,而是工程范式的根本转型。过去三年,开发者的核心能力是“选对模型”——在GPT、Claude、Gemini之间做出正确选择。

ZDQ58818的博客 74

Qt 的QObject底层架构、原理详细描述

该模型的中心特征是一种非常强大的无缝对象通信机制,称为信号和槽。Qobject是QT中的一个基类,它是所有QT对象的父类,它提供了一些基本的功能,比如信号和槽、属性系统、元对象系统等。如果你想让你的类具有这些功能,那么你就需要让你的类继承自Qobject,并且在类声明中加上Q_OBJECT宏。这样,moc就可以为你的类生成元对象代码,让你的类能够在运行时获取自己的元信息。引入Q_OBJECT,这样就可以让定义的class类继承QObject,继而能够调用信号与槽(用的最多的机制)。

Helloorld_1的博客 1402

补丁1.0:使用Eviews做ADF检验

补丁1.0:使用Eviews做ADF检验

Jet4505的博客 1961

QObject详细描述(来自assistant.exe)

详细描述 QObject类是所有Qt对象的基类。 QObject是Qt Object Model的核心。这个模型的核心特征是,为了无缝对象通信的,叫做signals和slots的一个强大的机制。你可以使用connect()连接一个信号和槽,使用disconnect()销毁该连接。为了避免永远不会结束的通知循环,你可以使用blockSignals()临时地组织信号。保护函数connectNotify()和disconnectNotify()让追踪连接成为可能。 QObjects使用obje...

天马行空 471

【JAVA】海康威视门禁机ISAPI接口开发,人脸上传更新接口

本文实现了一个HTTP工具类HTTPClientUtil,提供GET/POST/PUT/DELETE请求方法,支持摘要认证。工具类封装了Apache HttpClient,设置连接超时、最大连接数等参数,通过DeviceInfoDTO传递设备IP、端口和认证信息。文中还展示了两个应用示例:userInfoAdd()用于添加人员信息,FaceDataRecordAdd()用于添加人脸数据,均通过POST请求与设备ISAPI接口交互。该工具类简化了HTTP请求处理,支持设备管理系统的集成开发。

qq_27246521的博客 588

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2846

QT(10):QObject对象的构造、析构和父子关系

在setparent函数中调用了setParent_helper函数。一、QObject对象的父子关系。

qq_45088122的博客 532

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Qt元对象系统(Meta-Object)(一)、介绍

原文:https://blog.youkuaiyun.com/liang19890820/article/details/52020693 简述 Qt的元对象系统(Meta-Object System)提供了信号与槽机制,可用于对象间通信、运行时类别信息和动态属性系统。 元对象系统基于三个方面: QObject类:为objects提供了一个可以利用元对象系...

亅会飞的乌龟的博客 556

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Qt项目登录页面跳转

通过这样的连接和信号槽机制,当用户在登录界面点击登录按钮时,登录界面会发射一个登录信号,主界面接收到登录信号后会处理登录成功后的逻辑,并发射一个已登录信号,登录界面接收到已登录信号后会自动关闭。)的类定义中,添加一个槽函数。类的实现文件中,实现槽函数。

qq_53262591的博客 967

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

QT:使用多窗口做一个登录注册小项目(登录窗口、登录结果窗口、注册窗口)

loginresult.h(登录结果窗口)register.h(用户注册窗口)widget.h(登录窗口)

cxy255256的博客 1109

Qt元对象系统

QMetaObject是负责元对象信息的类,每个继承自QObject的类都会有一个QMetaObject对象,QObject对象共用该QMetaObject对象,给类提供远多于c++默认的typeinfo提供的信息。主要内容如下: 1、类信息 类:QMetaClassInfo  Q_CLASSINFO //Q_CLASSINFO("author", "Sabrina Schweinsteige

zxjluohe的专栏 450

QObject 详解

QObject描述 1、QObject类是所有Qt对象的基类。 2、QObject是Qt对象模型的核心。该模型的核心特性是一种非常强大的无缝对象通信机制,称为信号和槽。可以使用connect()将信号连接到槽,并使用disconnect()销毁连接。为了避免永无止境的通知循环,可以使用blockSignals()临时阻止信号。受保护的函数connectNotify()和disconnectNotify()使跟踪连接成为可能。 3、对象通过对象树的形式组织。当创建一个以另一个对象为父对象的QObject

beibeix2015的博客 1万+

QObject类

QObject类是所有Qt对象的基类。共200多个派生类(略)提示:所有函数都是可重入的。

floatBit的专栏 1366

QObject

QObject

友善啊,朋友的博客 3920
上一篇: QObject类
下一篇: QChildEvent类
floatbit
博客等级 码龄24年 460粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值