Qt信号和槽

简介: Qt信号和槽

Qt信号和槽实际上就是23种设计模式中的观察者模式;当某个事件发生了就会发出信号,处理信号和自己的函数称为槽绑定来处理这个信号;信号的本质就是事件;

通过Qobject::connect函数连接信号和槽对应的对象,该函数是一个回调函数并被注册到Qt中;

信号和槽的优点:类型安全,松散耦合;一个类型若要支持信号和槽,则必须从QObject或QObject的子类继承,信号和槽机制不支持对模板的使用;

信号和槽机制增强了对象之间通信的灵活性,通常传递一个信号来调用槽函数会比直接调用非虚函数运行速度慢十倍左右,其原因:

       1)多线程的情况下,信号需要排队等待;

       2)编组和解组传递参数;

       3)安全的遍历所有关联;

       4)需要定位接受信号的对象;

Qt信号和槽第5个参数、

enum ConnectionType {
    AutoConnection,
    DirectConnection,
    QueuedConnection,
    BlockingQueuedConnection,
    UniqueConnection =  0x80
};

       1)自动连接(AutoConnection),默认的连接方式,如果信号与槽,也就是发送者与接受者在同一线程,等同于直接连接;如果发送者与接受者处在不同线程,等同于队列连接;

       2)直接连接(DirectConnection),当信号发射时,槽函数立即直接调用。无论槽函数所属对象在哪个线程,槽函数总在发送者所在线程执行,即槽函数和信号发送者在同一线程;

       3)队列连接(QueuedConnection),当控制权回到接受者所在线程的事件循环时,槽函数被调用。槽函数在接受者所在线程执行,即槽函数与信号接受者在同一线程;

       4)锁定队列连接(BlockingQueuedConnection),槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个;

       5)单一连接(UniqueConnection),这个flag可以通过按位或(|)与以上四个结合在一起使用。当这个flag设置时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接;

目录
相关文章
|
1月前
|
编译器
(9)Qt中信号与槽重载的解决方案
本文介绍了在Qt中处理信号与槽重载问题的三种解决方案:使用函数指针、Qt提供的QOverload类和Qt4的宏方式。
103 3
|
6月前
|
存储 安全 编译器
【Qt 底层机制之信号和槽 】深入探究Qt信号和槽背后的原理
【Qt 底层机制之信号和槽 】深入探究Qt信号和槽背后的原理
1963 4
|
6月前
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
82 0
|
6月前
|
编译器 C++ 开发者
QT基础【7-跨进程发送信号】
QT基础【7-跨进程发送信号】
|
6月前
|
存储 API C++
【Qt 信号槽】深入探索 Qt 信号和槽机制中的引用传递“ (“A Deep Dive into Reference Passing in Qt Signal and Slot Mechanism“)
【Qt 信号槽】深入探索 Qt 信号和槽机制中的引用传递“ (“A Deep Dive into Reference Passing in Qt Signal and Slot Mechanism“)
535 0
|
6月前
|
安全 编译器 开发者
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
209 0
|
1月前
(8)Qt中的自定义信号
本文介绍了如何在Qt框架中创建和使用自定义信号,并通过一个父子窗口切换的示例来展示自定义信号的实现和应用。
72 3
(8)Qt中的自定义信号
|
18天前
|
C++
003 Qt_信号和槽-上
本文介绍了Qt中的信号与槽机制,包括信号和槽的概念、本质及连接方法,并演示了如何自定义槽函数。信号是事件的体现,槽是对信号的响应函数。通过信号与槽,可以将独立的控件关联起来,实现复杂的交互逻辑。文中还详细展示了如何在Qt项目中定义和使用槽函数,通过实例代码和图形化界面操作,帮助读者更好地理解和应用这一机制。
29 1
003 Qt_信号和槽-上
|
5月前
|
安全 C++ Windows
Qt信号与槽机制
Qt信号与槽机制
52 1
|
3月前
|
程序员 C++
【Qt】信号与槽(下)
【Qt】信号与槽(下)