Qt信号与槽
来源:互联网 发布:淘宝慈恩数码是正品吗 编辑:程序博客网 时间:2024/04/28 04:24
定义信号使用Qt的signals关键字。注意信号没有访问权限,实际上它们都是受保护权限的,也就是说只有定义信号的类自己及派生类才能发射这个信号。信号一般定义为无返回值的函数,这个函数不需要实现(由moc工具自动生成的代码实现)。
定义槽使用Qt的slots关键字。槽同时也是一个普通函数,可以有各种访问权限。
发射信号使用Qt的emit关键字。信号发射后,与这个信号链接的槽就会被调用。
连接信号和槽可以使用QObject类的以下静态成员函数:
- bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection);
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection);
其中各个参数及返回值的含义解释如下:
1)sender:指向Qt对像,信号的发送者。
2)signal:表示信号的字符串。
3)receiver:指向Qt对象,信号的接受者。
4)method:表示与信号连接的方式的字符串,这里的方法可以是槽或信号。
5)type:表示连接方式。
6)返回值:true表示连接成功,false表示连接失败。
信号与槽的连接方式有一下几种。
1)Qt::DirectConnection:直接方式,信号发射时将直接调用槽。
2)Qt::QueuedConnection:队列方式,信号发射时产生一个事件进入队列,事件被处理时槽才能调用。
3)Qt::BlockQueuedConnection:阻塞队列方式,信号发射时产生一个事件进入队列,然后当前线程进入等待状态,直到事件处理完毕,仅用于多线程的情况。
4)Qt::AutoConnection:自动方式,由系统自动选择连接方式。
一般来说都采用默认的自动连接进行连接。因为支持信号和槽的类都是QObject的派生类,因此如果在成员函数中进行连接可以不写QObject::这样的限定符。
用来表示信号和槽的参数都是字符串,Qt提供了两个宏用于构造这样的字符串:对于信号使用SIGNAL,对于槽则使用SLOT,用它们将函数的原型包围起来即可。注意这里的函数原型只能写出类型,不能有任何参数名,否则连接时将会失败。
信号和槽的连接有以下特点:
1)一个信号可以连接到多个槽。
2)一个槽可以被多个信号连接。
3)信号也可以连接到信号,此时前者的发射信号将导致后者的发射。
4)信号的参数类型可以与槽的参数类型对应,信号的参数可以比槽的参数多,但不可以少,否则连接将失败。
注意:定义信号与槽时最好不要有自定义类型的参数,否则它只能与特定参数类型的信号或槽连接,可用性大大降低。
已经建立的连接关系也可以被断开,用QObject类的以下静态成员函数:
- bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method);
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method);
这里各个参数及返回值的含义与connect函数相同。需要注意的是,除了参数sender,其他参数都可以是0,代表“所有”。
常用的Qt对象类中已经定义了很多有用的信号和槽,编程时可以直接调用。
- Qt 信号与信号,信号与槽
- qt 槽与信号
- QT信号与槽
- QT 信号与槽
- QT信号与槽
- Qt信号与槽
- Qt信号与槽
- QT信号与槽
- Qt信号与槽
- QT信号与槽
- QT信号与槽
- Qt信号与槽
- Qt信号与槽
- QT 信号与槽
- Qt信号与槽
- QT信号与槽
- qt 信号与槽
- Qt信号与槽
- LNK4098: 默认库“MSVCRT”与其他库的使用冲突
- VC写ACtivex控件的起步----创建和调试
- HDU1686:Oulipo
- dynamic (C# Reference)
- Hibernate基于注解方式的各种映射全面总结
- Qt信号与槽
- WINCE串口通讯经验小结
- 设计模式(十)----- 外观模式(Facade)----(JAVA版)
- 【译】前端开发工程师如何在2013年里提升自己
- HDU 1171 Big Event in HDU
- 全民内核
- Qt常用类(1)—— 开端
- 《效率提升十倍的google化知性生产技巧》思维导图
- 支持在Win7和XP系统上创建环境变量的批处理文件