Qt消息模型
Qt封装了具体操作系统的消息机制
Qt遵循经典的GUI消息驱动事件模型
Qt中如何表示用户消息?
Qt中如何映射用户消息到消息处理函数?
Qt中消息映射需要遵循什么规则?
信号与槽
Qt中定义了与系统消息相关的概念
信号(Signal)
由操作系统产生的消息
槽(Slot)
程序中的消息处理函数
连接(Connect)
将系统消息绑定到消息处理函数
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用于类中声明消息处理函数
自定义槽
只有QObject的子类才自定义槽
定义槽的类必须在声明的最开始处使用Q_OBJECT
类中声明槽时需要使用slots关键字
槽与所处理的信号在函数签名上必须一致
SIGNAL和SLOT所指定的名称中:
可以包含参数类型
不能包含具体的参数名
#include "widget.h"
#include <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();
}