Qt学习
Posted wyp1988
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt学习相关的知识,希望对你有一定的参考价值。
1.
2. 信号槽机制
- 所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,用自己的一个函数(成为槽(slot))来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。
- QObject
- 一个类想要有信号槽功能,必须继承QObject,并且在类定义中使用Q_OBJECT宏,其在宏展开时会为类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力
- 发送者和接收者都需要是QObject的子类(当然,槽函数是全局函数、Lambda 表达式等无需接收者的时候除外)
- connect
- 使用connect的多个重载函数,来定义和建立信号槽关系(谁触发,谁接受,传什么,接受者干什么)
- 使用QObject::connect()函数连接信号和槽。
- signals
- 使用 signals 标记信号函数,信号是一个函数声明,返回 void,不需要实现函数代码;
- 类中的signals块所列出的,就是该类的信号。信号就是一个个的函数名,返回值是 void(因为无法获得信号的返回值,所以也就无需返回任何值),参数是该类需要让外界知道的数据。信号作为函数名,不需要在 cpp 函数中添加任何实现
- SIGNAL和SLOT宏
- 多用于connect函数中,将函数转换为字符串参数
- 多用于Qt4??,因此其只能有字符串参数?
- emit
- 是 Qt 对 C++ 的扩展,是一个关键字(其实也是一个宏)。emit 的含义是发出,也就是发出某个信号
- 使用 emit 在恰当的位置发送信号;
- 槽函数是普通的成员函数,作为成员函数,会受到 public、private、protected 的影响;
以上是关于Qt学习的主要内容,如果未能解决你的问题,请参考以下文章