Qt5 信号槽连接 函数重载、参数不一致问题

Qt5中使用以下方式代替Qt4的信号槽连接,在编译时即对连接的函数指针进行检测,提高了安全性。而Qt4的连接方式是基于字符串的,只能在运行时进行检测。
在Qt4的connect方法上右键 Refactor->Convert connect() to Qt 5 Style 可直接将Qt4连接方式转为Qt5连接方式。

//Qt5方法
connect(player, &MyClass::mySignal,
                   this, &MyWidget::mySlot);

但若是信号或槽有重载,由于这种方式没有标明参数,编译器就无法确定连接的是哪一个函数,从而报错。解决方法如下:

//直接使用Qt4方法
connect(player, SIGNAL(mySignal()), this, SLOT(mySlot()));

//Qt5第一种方法
void (MyClass::*noArgs)() = &MyClass::mySignal;//无参
void (MyClass::*withArgs)(QString, int) = &MyClass::mySignal;//有参

connect(player, noArgs, this, &MyWidget::mySlot);//连接无参的信号槽

//Qt5第二种方法
connect(slider, &QSlider::valueChanged,
              lcd, static_cast<void (QLCDNumber::*)(int)>(&QLCDNumber::display));
              
//Qt5第三种方法
connect(slider, &QSlider::valueChanged,
              lcd, QOverload<int>::of(&QLCDNumber::display));
         
//Qt5第四种方法(需要C++14)
connect(slider, &QSlider::valueChanged,
              lcd, qOverload<int>(&QLCDNumber::display));

信号槽连接时若参数不一致,使用Qt5方法也会报错。若信号参数比槽多,则用上述任一方法将信号函数进行详细声明;若槽参数比信号多(多出的槽参数有默认值),则无法使用Qt5方法,只能使用Qt4方法连接。
另外,与QML连接信号槽也只能使用Qt4的方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值