QT学习(五)——从子窗口传来多个信号(带参数的自定义信号)

同样是两个窗口,主窗口与副窗口,给副窗口自定义两个重载的信号,传给主窗口处理

 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,

 最好是在编译阶段报错,可以更好的完善程序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值