C++模拟实现Qt的信号与槽机制 您所在的位置:网站首页 信号与槽是如何实现的 C++模拟实现Qt的信号与槽机制

C++模拟实现Qt的信号与槽机制

2024-06-16 09:48| 来源: 网络整理| 查看: 265

对于大多学习Qt的朋友,心中都有种好奇——那就是Qt最核心的信号与槽是如何实现的,对于小编自己也是一样,当然大家肯定都会去查阅相关资料,但大部分时候也只是一知半解,如果说要自己实现就会又摸不着头脑了;所以小编决定自己亲自用C++实现一个简单版的信号槽,来理解Qt的实现原理。于是小编就在翻阅各牛人朋友的博客和反复研究Qt源码自己重新写了一下以便交流学习。

我们先还是简单的梳理一下Qt信号与槽的实现机理:在Qt中实现信号与槽最重要的就是通过元对象系统(MOS)的元对象编译器(MOC)将我们定义的需要使用到信号与槽的类中的信号及信号调用槽函数的方法进行定义(这一步就会生成与源文件对应的moc_xx.cpp文件),然后通过系统提供的关联方法(connect)将信号与槽建立一一对应关系,当发射信号(其实就是调用信号函数)时就会通过信号与槽的对应关系找到对应槽函数进行调用。这样的好处就是对于使用者而言不必去关心函数指针回调函数这些对于初学者比较不太容易搞清晰的东西,简化了使用者的操作。当然就像我们在享受幸福生活的时候,就一定有人在我们背后默默付出砥砺前行!这里也一样,对于我们使用者简化了操作,那为了实现这样的效果就需要在后台提供更多的支持。接下来我们就通过代码再来梳理一遍。

首先我们使用信号与槽肯定就会有信号的发送者与接收者,所以我们就先去定义这两个类对象:

sender.h

#pragma once #include "object.h" class Sender : public Object { X_OBJECT public: Sender(int n = 0) : m_num(n){ } void sendSig(); signals: void holdClass(int n); int m_num; };

sender.cpp

#include "sender.h" void Sender::sendSig() { std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有