博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt原理分析(一):Qt中的消息处理
阅读量:4113 次
发布时间:2019-05-25

本文共 973 字,大约阅读时间需要 3 分钟。

1.Qt中的消息处理

Qt的消息模型

  • Qt封装了具体操作系统的消息机制

  • Qt遵循经典的GUI消息驱动事件模型

在这里插入图片描述

问题

1.Qt中如何表示用于消息
2.Qt中如何映射用户消息到消息处理函数
3.Qt中消息映射需要遵循什么规则?

信号与槽

Qt中定义了与系统消息相关的概念

信号(Signal)

  • 由操作系统产生的消息

槽(Slot)

  • 程序中的消息处理函数

连接(connect)

  • 将系统消息绑定到消息处理函数

Qt中的消息处理机制

在这里插入图片描述

问题:那么如何连接信号与槽呢?

Qt的核心—QObject::connect函数

在这里插入图片描述

  • 在Qt中,消息用字符串进行描述
  • connect函数在消息名和处理函数之间建立关系

Qt中的“新”关键字

  1. SIGNAL:用于指定消息名
  2. SLOT:用于指定消息处理函数名
  3. Q_OBJECT:所有自定义槽的类必须在类声明的开始处加上Q_OBJECT
  4. slots:用于在类中声明消息处理函数

示例代码:初探信号与槽

#include 
#include
int main(int argc, char *argv[]){
QApplication a(argc, argv); QPushButton b; b.setText("Click me to quit!"); b.show(); QObject::connect(&b, SIGNAL(clicked()), &a, SLOT(quit())); return a.exec();}

代码分析:

  1. b对象设置为发送对象
  2. 消息名设置为“点击消息”
  3. a对象设置为接收对象
  4. a接收到“点击消息”时执行“退出动作”

所以当我们点击b按钮时,a对象将退出。

信号与槽不可忽视的军规

当我们自定义信号和槽时,需要注意一下几点规则。

  1. Qt类只能在头文件中声明
  2. 信号与槽的原型应该完全相同
  3. 信号参数多于槽参数时,多于的参数被忽略
  4. 槽函数的返回值必须是void类型
  5. 槽函数可以像普通成员函数一样被调用
  6. 信号与槽的访问属性对于connect/disconnect无效

信号与槽的意义

  1. 最大限度的弱化了类之间的耦合关系

  2. 在设计阶段,可以减少不必要的接口类(抽象类)

  3. 在开发阶段,对象间的交互通过信号与槽动态绑定

转载地址:http://chhsi.baihongyu.com/

你可能感兴趣的文章
<iOS>iPhone 应用里实现截屏功能的代码
查看>>
iOS6 中新的控件UIRefreshControl下拉刷新
查看>>
bitbucket和git 进行代码管理
查看>>
在CGD中快速实现多线程的并发控制
查看>>
IOS开发网络篇之──ASIHTTPRequest详解
查看>>
IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
查看>>
<iOS>通过运行时来实例化一个,只知道名字的类, 名字为变量
查看>>
工作备注一下
查看>>
通过UIView寻找UIViewController(Find UIViewController by UIView)
查看>>
UIButton在设置Image时,会把之前设置的frame给覆盖掉。
查看>>
ios的一些知识点
查看>>
Wax 将Lua带人iPhone开发
查看>>
开发愤怒的小鸟的Lua语言:Wax框架详解(二)
查看>>
用Lua开发iphone程序
查看>>
苹果个人开发者账号如何升级成公司账号
查看>>
清华大学老师的一席话——太受益了
查看>>
iOS 粒子效果 CAEmitterCell CAEmitterLayer
查看>>
[转载]CAEmitterLayer
查看>>
<iOS>属性写法
查看>>
AFNetwork作用和用法详解
查看>>