同样是两个窗口,主窗口与副窗口,给副窗口自定义两个重载的信号,传给主窗口处理
void mySignals();
//信号可以重载
void mySignals(int,QString);
由被关联的按钮发送消息,并送出两条消息给主窗口
emit mySignals();
emit mySignals(520,"I Love You!");
主窗口中处理消息的两个槽函数
//处理子窗口发送的第一个信号
void resume();
//处理子窗口发送的第二个信号,记住信号的返回值与参数和槽函数一定要一致
void realSub(int,QString);
主窗口处理两个消息
//处理从子窗口发射来的第一个信号
connect(&son,&otherWidget::mySignals,this,&Widget::resume);
//处理从子窗口发射来的第二个信号
connect(&son,&otherWidget::mySignals,this,&Widget::realSub);
开始编译
会报错!!因为两个信号重名,但是编译器不知道使用哪一个就会发生编译阶段的错误
----------------------------------------------------------------------------------------------------------------------
解决办法:函数指针
//处理从子窗口发射来的第一个信号
void(otherWidget::*funtion_p1)()=&otherWidget::mySignals;//设定了一个函数指针,
connect(&son,funtion_p1,this,&Widget::resume);
//处理从子窗口发射来的第二个信号
void(otherWidget::*funtion_p2)(int ,QString)=&otherWidget::mySignals;//BUG出现点,在对函数指针赋值的时候,后面的mySignals是不能够带参数的
connect(&son,funtion_p2,this,&Widget::realSub);
----------------------------------------------------------------------------------------------------------------------------
在QT中打印
#include<QDebug>//打印
qDebug()<<a<<str;
如果想要打印中文
qDebug()<<a<<str.toUtf8().data();
------------------------------------------------------------------------------------------------------------------------------
第二种解决方法
//QT4信号连接
//QT4槽函数必须要有关键字slots来修饰
connect(&son,SIGNAL(mySignals()),this,SLOT(resume()));
connect(&son,SIGNAL(mySignals(int,QString)),this,SLOT(realSub(int,QString)));
如果使用这种方法,那么我们需要修改槽函数的头文件
public slots://QT4的信号链接方法,必须对槽函数进行声明
//槽函数
void Get_to();
void changeWin();//在主窗口类中实现这个成员槽函数,是因为当主窗口向父窗口转换时,是主窗口类来调用函数,而且此时也只有主窗口包含一个成员父窗口对象
//处理子窗口发送的第一个信号
void resume();
//处理子窗口发送的第二个信号,记住信号的返回值与参数和槽函数一定要一致
void realSub(int,QString);
采用这种方法的弊端就是:
QT4这种信号连接的方式被淘汰的原因是,SIGNAL和SLOT是两个宏,会把函数转换为字符串,
不进行错误检查,从而在运行阶段造成错误,程序出现BUG,
最好是在编译阶段报错,可以更好的完善程序