QT的三大特性:
1、信号与槽
2、内存管理
3、事件处理
1、信号与槽
当信号产生时,就会自动调用绑定的槽函数。
自定义信号:
类中需要添加O_OBJECT宏
声明:
signals标签之下进行声明
定义:
信号不需要定义
发送信号:
emit 信号();
emit 信号(参数1, 参数2, ....);
信号可以重载,当槽函数需要参数时由信号给它传递。
自定义槽函数:
声明:类中的slots标签之下
定义:通常放在cpp中
总结
使用connect函数绑定信号与槽,解除绑定:disconnect
发送方,发送的信号,接收方,接收方触发的槽函数
connect(产生信号的对象指针(谁产生信号), 信号,处理信号的对象指针(谁调用槽函数), 槽函数);
1、QT4及以前的用法
// 信号或槽函数重载时一定使用此方法
connect ( pb , SIGNAL ( clicked ( bool ) ) , this , SLOT ( pb_input_handler ( ) ) ) ;
2、QT5的用法
// 不适合用于有重载的情况
connect( pb , &QPushButton::clicked , this , &Widget::pb_input_handler ) ;
3、lambda表达式
// 不适合用于有重载的情况
// [ ]捕获参数:"="为使用值传递,"&"为使用地址传递
connect ( pb , &QPushButton::clicked , [ ]( ){
}) ;
槽函数的参数:
槽函数的参数是由信号传递
槽函数的参数个数 <= 信号的参数个数
槽函数的参数类型与对应的信号的参数类型一致
信号与槽对应关系:
1对1:一个信号对应一个槽函数
1对多:一个信号可以对应多个槽函数,当信号产生时所有绑定的槽函数按顺序执行
多对1:多个信号可以对应一个槽函数,只有其中任何一个信号产生都会调用一次这个槽函数
2、内存管理
对象树机制:QT中的对象可以组织成树状结构,每个对象可以有一个父对象,当父对象被销毁时,其所有子对象也会被自动销毁,从而简化了内存管理。
3、事件处理
QApplication类是QT应用程序的核心类,负责管理整个应用程序的生命周期、事件处理和全局资源,是QT应用程序的入口点和核心控制器。QApplication类提供了事件循环,负责接收和分发事件,处理用户输入和系统事件,并将事件发送给对应的对象进行处理。