Qt5的connect函数绑定,通过函数名进行绑定,在子类中的问题

本文探讨了在Qt5中使用connect函数时遇到的问题,特别是当尝试在子类中使用父类绑定的信号槽函数时的挑战。文章指出,虽然Qt5的connect函数允许通过函数名进行绑定,但这种绑定在类的继承结构中存在限制,导致在重构过程中需要将代码移到子类时出现问题。为了解决这一问题,作者尝试了多种解决方案,包括修改访问修饰符和使用宏绑定,但这些方法都带来了新的问题。最终,作者选择将所有信号槽绑定保留在父类中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文假定读者对connect函数使用是没有问题的

qt5的connect函数,可以通过函数名进行绑定,

QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,const QObject *, PointerToMemberFunction,Qt::ConnectionType);

但是需要注意的是,绑定的函数名只能在类中使用,甚至是子类都无法使用,用protected(只有父类和子类可以使用)也无法使用。这就有问题了。

但是在实际使用过程中,父类耦合太严重,在重构过程中,绑定的信号槽函数,开始都是在父类中,整合代码的时候,绑定方式不一样,所以需要提出不同的代码到子类中进行多态整合使用。就出现了需要在子类分别绑定不同信号跟槽的需求,但是这个时候在父类中绑定的函数,在子类中是编译通不过的,只能修改成public或者通过宏绑定才能成功。但是问题是,设计的好好的封装槽不能修改成public,强制修改成宏绑定,编译通过了,但是槽函数无法触发了。

没办法,只能放弃,把函数名绑定的信号槽全部放到父类中绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值