目录
一、打印输出文本的编辑
PS更正:去掉打印输出中的空格:space更正为nospace
void Student::treat(QString food){
// QString---->QByteArray---->char *
qDebug().nospace()<<"请老师吃饭!"<<food.toUtf8().data();
二、补充QT4信号与槽函数的写法
PS:1、高版本可以兼容低版本,但低版本不可兼容高版本。
2、QT4版本中的信号和槽的函数名切勿写错,如果错误并不会编译报错。
//公式:connect(sender,signal,receiver,slot);
connect(tea,Teachersignal,stu,studentslot);//QT5版本及其以上
//公式:connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));
connect(tea,SIGNAL(hungury(QString)),stu,SLOT(treat(QString)));//QT4版本
三、信号与槽的总结
- 发送者与接受者需要是QObject的子类(槽函数全局,lambda除外)
- 信号和槽函数返回值都是void
- 信号需要声明不需要定义实现,槽函数需要声明也需要定义实现。
- 槽函数是普通的成员函数,作为成员函数,会受到public、private、protected 的影响;
- 使用emit在恰当的位置发送信号;
- 使用connect()函数连接信号和槽。
- 任何成员函数、static函数、全局函数和Lambda表达式都可以作为槽函数。
- 信号槽要求信号和槽的参数一致,所谓一致,是参数类型一致。
- 如果信号和槽的参数不一致,允许的情况是,槽函数的参数可以比信号的少,即便如此,槽函数存在的那些参数的顺序也必须和信号的前面几个一致起来。这是因为,你可以在槽函数中选择忽略信号传来的数据(也就是槽函数的参数比信号的少)。
拓展:
- 信号与槽对应可以一对一,一对多(发出信号,槽函数一个一个执行,顺序不确定),多对一(任意信号发出,槽函数都会执行)。
- 信号可以连接信号。
- 槽可以被断开链接(disconnect),槽也可以被取消链接(当一个对象被delete,取消这个对象上的槽)。
- 使用c++11中的lambda表达式。