程序员笔记 (十一)QObject 信号和槽 委托和回调


aihuafeng66t
克里斯蒂亚诺诺 2024-01-12 13:47:25 53034 赞同 0 反对 0
分类: 资源
程序员笔记 (十一)QObject 信号和槽 委托和回调

(一)QObject

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

一个QObject对象创建在另一个QObject类(该类可以称作父类)中,该对象将自动将其自身添加到父对象的孩子列表中。父类拥有对所有子QObject对象的控制权,可以自动在析构函数中删除所有的子对象。

需要使用信号和槽机制的QObject对象,必须在声明类中加入Q_OBJECT宏,该机制依赖于元对象编译器(MOC)。不管有没有用到信号和槽机制,最好都加上该宏,避免出现一些奇怪的问题。

(二)

QObject类是所有Qt对象的基类。
QObject是Qt对象模型的核心。该模型的核心特征是称为信号和槽的对象通信机制。您可以使用connect()将信号连接到槽,并用disconnect()终止该连接。为了避免信号死循环,你可以调用blockSignals()去终止该对象的信号发射。保护类型函数connectNotify()和disconnectNotify()可以跟踪连接。
QObjects对象在树结构中组织起来。当你创建一个QObject对象,以另一个对象作为父对象时,该对象将自动添加到父对象的children()列表中。父类对象拥有子类对象的所有权,即它将在析构函数中自动删除子类对象。你可以通过findChild()或者findChildren()函数由名称或者类型查找对象。
每个对象都有一个objectName(),对象的类名也可以通过metaObject::className()获得。你可以用inherits()函数来判断对象是否继承自另外一个类。
当一个对象被删除时,它会发出一个destroy()信号。您可以捕获此信号,以避免对空指针的引用。
QObjects可以通过event()接收事件,也可以过滤其他对象的事件。有关详细信息,请参阅installEventFilter()和eventFilter()。
事件在创建对象的线程中传递。请注意,对于没有线程亲和性(thread()返回零)的QObject,完全不执行事件处理。使用moveToThread()函数来更改对象及其子对象的线程亲和性(如果对象具有父对象则不能被移动)。
请注意,对于实现信号和槽机制或动态对象属性,Q_OBJECT宏是必需的。你需要在源文件上运行元对象编译器。我们强烈建议在QObject的所有子类中使用此宏。无论是否使用了信号和槽机制,这样做避免一些奇怪的行为。
所有Qt Widget都继承QObject。一个方便的函数isWidgetType()返回一个对象是否是一个Widget。它比qobject_cast(obj)或obj->inherits("")快很多。

(三)

两种常用的信号和槽的连接方法
指定发送对象,接收对象,发送信号函数,接收信号处理的槽函数以及可选择连接类型。函数原型:
  •  
[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)br

其中连接类型说明如下:

枚举值 数值 说明

Qt::AutoConnection 0 默认值。如果接收对象和触发信号的对象处于同一线程中,则选择直连的方式;否则,使用队列进行连接。

Qt::DirectConnection 1 发出信号后立即调用槽函数。该槽函数位于信号所处的线程中。

Qt::QueuedConnection 2 当控制权返回到接收者线程的事件循环时,将调用该插槽。该插槽在接收者的线程中执行。

Qt::BlockingQueuedConnection 3 与Qt :: QueuedConnection相同,但是发送信号的线程被挂起,直到槽函数执行完成再恢复线程。如果接收器位于发送信号的线程中,则不得使用此连接,否则应用程序将死锁。

Qt::UniqueConnection 0x80 可以使用按位OR来与上述任何一种连接类型组合。设置Qt :: UniqueConnection时,如果连接已经存在(即,如果相同信号已经连接到同一对对象的同一插槽),则QObject :: connect()将失败。

 

(四)委托和回调的区别

委托和回调的区别委托就是说,我委托你这个人去帮我办什么事,因为我去不了,我今天有班要上我呢,就委托你去帮我办事,这叫委托回调,那就是调回原来的地方了,原来我在这里上班,然后我出去又到了其他地方去上班了,后来又把我调回原单位了,这就叫回调。

https://blog.csdn.net/qq_27726087/article/details/126126248

https://www.cnblogs.com/yangjunhe460/p/10471246.html

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
克里斯蒂亚诺诺L1
粉丝 0 资源 831 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  130
统信桌面专业版【全盘安装UOS系统】介绍  129
银河麒麟桌面操作系统安装佳能打印机驱动方法  120
银河麒麟桌面操作系统 V10-SP1用户密码修改  108
麒麟系统连接打印机常见问题及解决方法  30
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!