概述
1.Qt中的消息处理
Qt的消息模型
-
Qt封装了具体操作系统的消息机制
-
Qt遵循经典的GUI消息驱动事件模型
问题:
1.Qt中如何表示用于消息
2.Qt中如何映射用户消息到消息处理函数
3.Qt中消息映射需要遵循什么规则?
信号与槽
Qt中定义了与系统消息相关的概念
信号(Signal)
- 由操作系统产生的消息
槽(Slot)
- 程序中的消息处理函数
连接(connect)
- 将系统消息绑定到消息处理函数
Qt中的消息处理机制
问题:那么如何连接信号与槽呢?
Qt的核心—QObject::connect函数
- 在Qt中,消息用字符串进行描述
- connect函数在消息名和处理函数之间建立关系
Qt中的“新”关键字
- SIGNAL:用于指定消息名
- SLOT:用于指定消息处理函数名
- Q_OBJECT:所有自定义槽的类必须在类声明的开始处加上Q_OBJECT
- slots:用于在类中声明消息处理函数
示例代码:初探信号与槽
#include <QtGui/QApplication>
#include <QPushButton>
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();
}
代码分析:
- b对象设置为发送对象
- 消息名设置为“点击消息”
- a对象设置为接收对象
- a接收到“点击消息”时执行“退出动作”
所以当我们点击b按钮时,a对象将退出。
信号与槽不可忽视的军规
当我们自定义信号和槽时,需要注意一下几点规则。
- Qt类只能在头文件中声明
- 信号与槽的原型应该完全相同
- 信号参数多于槽参数时,多于的参数被忽略
- 槽函数的返回值必须是void类型
- 槽函数可以像普通成员函数一样被调用
- 信号与槽的访问属性对于connect/disconnect无效
信号与槽的意义
-
最大限度的弱化了类之间的耦合关系
-
在设计阶段,可以减少不必要的接口类(抽象类)
-
在开发阶段,对象间的交互通过信号与槽动态绑定
最后
以上就是闪闪紫菜为你收集整理的Qt原理分析(一):Qt中的消息处理的全部内容,希望文章能够帮你解决Qt原理分析(一):Qt中的消息处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复