码迷,mamicode.com
首页 > 其他好文 > 详细

第10课 初探 Qt 中的消息处理

时间:2016-04-26 00:16:38      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

1. Qt消息模型

(1)Qt封装了具体操作系统的消息机制

(2)Qt遵循经典的GUI消息驱动事件模型

技术分享 

2. 信号与槽

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

  ①信号(Signal):由操作系统产生的消息

  ②槽(Slot):程序中的消息处理函数

  ③连接(Connect):将系统消息绑定到消息处理函数(映射规则)

(2)Qt中的消息处理机制

技术分享 

(3)Qt的核心——QObject::connect函数

  ①函数原型

bool connect(const QObject* sender,     //发送对象
             const char* signal,        //消息名
             const QObject* receiver,   //接收对象
             const char* method,        //接收者成员函数(消息处理函数)
             Qt::ConnectionType type = Qt::AutoConnection);

  ②在Qt中,消息用字符串进行描述,method是成员函数的名字(也是字符串类型)

  ③connect函数在消息名和处理函数之间建立映射

(4)Qt中的“新”关键字

  ①SIGNAL:用于指定消息名

  ②SLOT:用于指定消息处理函数名

  ③Q_OBJECT:所有自定义槽的类必须在类声明的开始处加上Q_OBJECT

  ④slots:用于在类中声明消息处理函数

【编程实验】初探信号和槽

#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPushButton b; //顶级组件
    
    b.setText("Click me to quit!");
    b.show();
    
    //将按钮b的clicked消息映射到a的quit函数
    QObject::connect(&b, SIGNAL(clicked()), &a, SLOT(quit()));

    return a.exec();
}

3. 自定义槽

(1)只有QObject的子类才能自定义槽

(2)定义槽的类必须在声明的最开始处使用Q_OBJECT

(3)类中声明槽时需要使用slots关键字

(4)与所处理的信号在函数签名上必须一致(函数签名,即相同参数及类型、返回值

(5)SIGNAL和SLOT所指定的名称中,可以包含参数类型,但不能包含具体的参数名

【编程实验】为计算器实例添加消息处理函数

 

(6)小贴士:解决经典问题——Object::connect:No such slot…

  ①检查类是否继承于QObject

  ②检查类声明的开始处是否添加Q_OBJECT

  ③检查是否使用slots关键字进行槽声明

  ④检查槽的名称是否拼写错误

  ⑤重新执行qmake

4. 小结

(1)信号与槽是Qt中的核心机制

(2)不同的Qt对象可以通过信号和槽进行通信

(3)只有QObject的子类才能自定义信号和槽

(4)使用信号和槽的类必须在声明的最开始处使用Q_OBJECT

(5)信号与处理函数在函数签名上必须一致。

第10课 初探 Qt 中的消息处理

标签:

原文地址:http://www.cnblogs.com/5iedu/p/5433325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!