10-初探 Qt 中的消息处理

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
  • 信号与处理函数在函数前面上必须一致
发布了61 篇原创文章 · 获赞 31 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_40794602/article/details/105565477
今日推荐