文章目录
1. QT 消息模型
- QT 封装了具体操作系统的消息机制
- QT 遵循经典的 GUI 消息驱动事件模型
2. 信号与槽
- QT 中定义了与操作系统消息相关的概念
-信号 (Signal)
由操作系统产生
-槽 (Slot)
程序中的消息处理函数
-连接 (Connect)
将系统消息绑定到消息处理函数
- QT 中的消息处理机制
信号到槽的连接必须发生在连个 QT 对象之间
- QT 中的核心
QObject::connect
函数
bool connect( const QObject* sender,
const char* signal,名
const QObject* receiver,
const char* method,
Qt::ConnectionType type = Qt::AutoConnection
);
# Note:
在QT中,消息用字符串进行描述
connect函数在消息名和处理函数之间建立映射
- QT 中的新关键字
SIGNAL:用于指定消息名
SLOT:用于指定消息处理函数名
Q_OBJECT:所有自定义槽的类必须在类声明的开始处加上Q_OBJECT
slots:用于在类中声明消息处理函数
3. 自定义槽
- 只有 QObject 的子类才能自定义槽
- 定义槽的类必须在声明的最开始处使用 Q_OBJECT
- 类中声明槽时需要使用 slots,关键字
- 槽与所处理的信号在函数签名上必须一致
- SIGNAL 和 SLOT 所指定的名称中,可以包含参数类型和但是不能包含具体的参数名
解决经典问题:Qobject::connect:No such slot …
1. 检查是否继承于 QObject
2. 检查类声明的开始处是否添加 Q_OBJECT
3. 检查是否使用 slots 关键字进行槽声明
4. 检查槽的名称是否拼写错误
5. 重新执行qmake
4. 总结
- 信号与槽是 QT 中的核心机制
- 不同的 QT 对象可以通过信号和槽进行通信
- 只有 QObject 的子类才能定义信号和槽
- 使用信号和槽的类必须在声明的最开始处使用 Q_OBJECT
- 信号与处理函数在函数前面上必须一致