QObject【详细描述】

【AI气象6】Skilful nowcasting of extreme precipitation with NowcastNet 极端降水是气象灾害的重要因素,因此迫切需要通过高分辨率、长时间预报和局部细节的精准短期预报来减轻其社会经济影响。当前的方法存在模糊、衰减、强度或位置误差,基于物理的数值方法在捕捉关键的混沌动态(如对流起始)时面临挑战,而数据驱动的学习方法则未能遵循内在的物理法则(如平流守恒)。我们提出了 NowcastNet,这是一种针对极端降水的非线性短期预报模型,将物理演变方案与条件学习方法统一到一个端到端的神经网络框架中,通过优化预测误差进行训练。基于来自美国和中国的雷达观测数据,我们的模型能够生成物理上合理的降水短 阅读详情

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 文档中对此进行了详细解释。

另请参见  QMetaObjectQPointerQObjectCleanupHandlerQ_DISABLE_COPY(), and Object Trees & Ownership.


 <<<返回根页面

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

相关推荐

[DDR5] 模式寄存器 Mode Register MRR/MRW

模式寄存器用于定义各种操作模式。在初始化过程中,可以通过重新执行MRS命令来更改模式寄存器的内容。

串起点滴 1583

Q_OBJECT的作用

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

u011555996的博客 9373

WinCC OA官方中文视频教程(第一天)

WinCC OA官方中文视频教程(第一天),需要安装压缩包内的播放器进行播放

Qt之Q_OBJECT 宏的神奇之旅

Qt之Q_OBJECT 宏的神奇之旅

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

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

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

shenlaoli的博客 7195

QObject类介绍

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

zw_ggr_2017的博客 3589

QtQObject底层架构、原理详细描述

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

Helloorld_1的博客 1400

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

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

天马行空 468

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

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

qq_45088122的博客 528

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

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

亅会飞的乌龟的博客 552

Qt项目登录页面跳转

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

qq_53262591的博客 965

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

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

cxy255256的博客 1108

Qt元对象系统

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

zxjluohe的专栏 449

QtQObject详解

00. 目录 文章目录00. 目录01. 概述02. 线程亲和性03. 没有拷贝构造函数或赋值运算符04. 自动连接05. 动态属性06. 国际化07. 属性文档08. 常用成员方法09. 附录 01. 概述 QObject类是所以Qt类的基类,也是Qt对象模型的核心。这个模型中的核心特性就是能让对象键无缝通信的信号和槽的机制。我们可以使用connect()函数将一个信号连接到一个槽上,也可以使用disconnect()删除这个连接。为了防止无休止的的信号通知,还可以使用blockSignals()来临时阻

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 7836

QObject

QObject

友善啊,朋友的博客 3908

Qt---之Q_OBJECT详解

       信号和槽是Qt应用开发的基础,它可是将两个毫无关系的对象连接在一起,槽和普通的C++函数是一样的,只是当它和信号连接在一起后,当发送信号的时候,槽会自动被调用只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。        所有QObject的派生类在官方文档中都推荐在头文件中放置宏Q_OBJECT,那么该宏到底为我们做了哪些工作?在qobjectdef.h...

weixin_39609623的博客 2万+

Qt QObject

QObjectQt类体系的唯一基类,重要性就像MFC中的CObject或Delphi中的TObject,是Qt各种功能的活水源头。QObject的大小是8,除了虚函数表(即所谓的虚表)指针需要4个字节以外,另外的4个字节是指d_ptr(指针成员变量:QObjectData *d_ptr;备注:在最新版本中,被替换为QScopedPointer d_ptr;那么,QObjectData是个什么鬼?

hw5230的博客 1220

QT学习总结之QObject详解

QObjectQT框架的核心,在该对象内可以使用QT框架的信号和槽机制。

qq_27726087的博客 5452

【50.qt基础——QObject类】

QObject类是所有使用元对象系统的基类,也就是说,一个类如果直接或间接继承于QObject,它就可以使用信号与槽、属性等特性。

zzxsdu12345的博客 2449
上一篇: QObject类
下一篇: QChildEvent类
floatbit
博客等级 码龄24年 460粉丝 47原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值