QT信号槽: QT实现的观察者机制,可由信号触发槽方法。

QT里没有单独的关键词定义事件,因此:

 1、在系统层面,一般说的事件对QT而言,都是指操作系统层面的事件。

 2、在QT开发层面,事件更多是抽象说法,可以简单理解为:信号和槽是事件实现的一种方式。

举例:

当点击一个按钮的时候,QT底层应该是收到了操作系统的某个信号,进而触发了该信号在QT里对应的方法X,QT在这个方法X里又通过信号槽的方式触发开发者相应的代码。

系统执行方法X的过程可以认为是系统层面的一个事件。

附注:其他框架可能就是直接在上述的方法X里触发开发者的代码了。

区别:设计模式上事件一般是私有的,不能直接被外界触发;槽可以由外界通过信号触发。

注意:发信号是在接收者线程中执行,直接调用是在调用者线程中执行。

qt里的事件与信号槽   可以简单理解为  .net里的事件与委托。

其他参考:

https://bbs.csdn.net/topics/340136852

其他参考:

https://stackoverflow.com/questions/3794649/qt-events-and-signal-slots

Events are dispatched by the event loop. Each GUI program needs an event loop, whatever you write it Windows or Linux, using Qt, Win32 or any other GUI library. As well each thread has its own event loop. In Qt "GUI Event Loop" (which is the main loop of all Qt applications) is hidden, but you start it calling:

QApplication a(argc, argv);
return a.exec();

Messages OS and other applications send to your program are dispatched as events.

Signals and slots are Qt mechanisms. In the process of compilations using moc (meta-object compiler), they are changed to callback functions.

Event should have one receiver, which should dispatch it. No one else should get that event.

All slots connected to the emitted signal will be executed.

You shouldn't think of Signals as events, because as you can read in the Qt documentation:

When a signal is emitted, the slots connected to it are usually executed immediately, just like a normal function call. When this happens, the signals and slots mechanism is totally independent of any GUI event loop.

When you send an event, it must wait for some time until the event loop dispatches all events that came earlier. Because of this, execution of the code after sending event or signal is different. Code following sending an event will be run immediately. With the signals and slots mechanisms it depends on the connection type. Normally it will be executed after all slots. Using Qt::QueuedConnection, it will be executed immediately, just like events. Check all connection types in the Qt documentation.

QT信号槽: QT实现的观察者机制,可由信号触发槽方法。的更多相关文章

  1. Qt 学习之路 2(5):自定义信号槽

    Home / Qt 学习之路 2 / Qt 学习之路 2(5):自定义信号槽 Qt 学习之路 2(5):自定义信号槽  豆子  2012年8月24日  Qt 学习之路 2  131条评论 上一节我们详 ...

  2. 用ISO C++实现自己的信号槽(Qt另类学习)

    qtc++objectsignalclassstring   目录(?)[-] Qt信号与槽 引入元对象系统 建立信号槽链接 信号的激活 槽的调用 全家福 零零散散写在后面 Q_OBJECT Conn ...

  3. 【学习笔记】QT从入门到实战完整版(按钮和信号槽)(1)

    介绍说明 学习 QT 的目的只是为了可以实现跨平台的具有GUI 的程序,以前用的 MFC,但是无法应用在嵌入式平台.后来在全志的 Tina 系统中有看到 QT ,因此特地去了解了QT,挺有意思的,UI ...

  4. QT 信号与槽 QT简单加法器的实现

    信号与槽 背景: 面向过程 模块之间低耦合设计(高内聚). 函数调用: 直接调用 回调调用(低耦合) 面向对象 模块之间低耦合设计(高内聚) 对象调用 直接调用 接口调用 QT: 信号与槽解决问题: ...

  5. Qt信号-槽原理剖析--(2)自己实现信号槽

    时间乃是最大的革新家--培根 先了解一下相关宏: qt为c++增加的相关宏:signals, slots,emit 在qt的预编译过程中,这些宏会被替换. 1)#define signals publ ...

  6. Qt之UI文件设计和运行机制

    1.项目文件组成在QtCreator中新建一个WidgetApplocation项目,选中窗口基类中选中QWidget作为窗口基类,并选中"GnerateForm"复选框.创建后项 ...

  7. [爬坑记录] Qt 代码卡住 不发信号 不触发槽

    先让我激动一会儿 [捂脸] 最近在用Qt做个程序 用来参加比赛 期间总共遇到两次如标题的问题 也即是 莫名其妙的不触发槽函数了 而且原因也不一样 {先说明 我学习Qt依旧只是入门级 也许入不了大佬法眼 ...

  8. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的clicked信号参数QAbstractButton *解决办法

    一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:D ...

  9. 【Qt】关于Qt【转】

    什么是Qt Qt是一个针对桌面.嵌入式.移动设备的一个跨平台的应用程序开发框架,支持的平台包括Linux.OS X.Windows.VxWorks.QNX.Android.iOS.BlackBerry ...

  10. 【Qt编程】Qt学习笔记<二>

    1.      QApplication类和QWidget类都包含在QtGui模块中.所以我们可以只包含这个头文件即可. 2.      在c++中,用new分配了内存空间就需要用delete来释放空 ...

随机推荐

  1. Benchmark论文解读:Evaluating the Ripple Effects of Knowledge Editing in Language Models

      论文发表于自然语言处理顶刊TACL-2024(原文链接).目前模型编辑方法的评估主要集中在测试单个事实是否被成功注入,以及模型对其它事实的预测是否没有改变.作者认为这样的评估模式有限,因为注入一个 ...

  2. DeepSeek MOE 代码实现

    前置知识: PyTorch 基础函数操作整理 1. topk 操作 功能: torch.topk 用于返回输入张量中指定维度上的前 k 个最大元素及其对应的索引. 示例代码: import torch ...

  3. Windows下Gitlab多账号配置(SSH)终极解决方案

    多 Git 账号管理(SSH 模式) 动机: 我在使用多个 Git 账号时经常遇到麻烦:每次切换账号都要重新登录,尤其是在浏览器中进行身份验证时,问题更明显.我的默认浏览器是 Edge,而 GitHu ...

  4. com.alibaba的fastjson使用(持续添加)

    1.JSON换实体类T 1 //json是JSONObject类型,将json转成实体类T 2 T tt = JSONObject.parseObject(json.toJSONString(), T ...

  5. 前端开发系列132-进阶篇之脚手架Yue-cli的实现01-commander模块

    这是系列文章`前端脚手架实现`的第一篇,主要讲解脚手架工具中的核心模块命令行参数解析功能的实现,重点讲解 Node 模块 [commander]()的使用. 在前端开发中我们已经接触过各种各样的脚手架 ...

  6. 【深入理解ReentrantReadWriteLock】读写分离与锁降级实践

    一.读写锁的核心价值 在多线程编程中,同步机制是保证线程安全的关键.传统的互斥锁(如synchronized)在读多写少的场景下存在明显性能瓶颈:读操作被不必要的串行化,即使多个线程只读取数据也会相互 ...

  7. leetcode 54 螺旋数组

    简介 忘不了, 这是华为面试官给我的面试题, 但是我没有在1分钟内做出来. 或许那个时候面试官本来就不想要一个人. 使用模拟的方法. 使用一个visited数组, 判断是否走到边界, 只有四个方向: ...

  8. HyperWorks install

    简介 网格划分软件HyperWorks 的下载链接 https://www.jb51.net/softs/677139.html#downintro2 hyperWorks 的安装链接 http:// ...

  9. POLIR-财政- 财政分级制度: 一级财政、二级财政 和 三级财政 及 计划单列市

    地方财政 受制于中央财政,自主度高 的 盈余多:发展的就好,经济繁荣富强度更高. 财政 和 税制 在财政体系中,通常根据行政级别和职能的不同,将财政划分为不同的层级. 这里我们主要讨论的是一级财政.二 ...

  10. SciTech-AV-Audio-Coding-Sampling-PCM:Multiplex(FD频分/TD时分多工)+DPCM(Delta增量)+ADPCM(Adaptive Delta自适应增量) + Oversampling超采样

    pdf: https://web.stanford.edu/class/ee179/lectures/notes13.pdf EE 179: Communication Systems Textboo ...