关于QOverload关键字的作用和用法

作用

在 Qt 中,QOverload 是一个用于解决信号和槽函数重载问题的辅助工具。当信号或槽函数有多个重载版本时,编译器无法直接确定应该使用哪个版本,这时就需要使用 QOverload 来明确指定要连接的信号或槽的签名。
QOverload 是一个模板工具,用于显式指定信号或槽的签名。它可以帮助编译器确定要连接的函数指针类型。

背景

在 Qt 中,信号和槽是通过 connect 函数连接的。如果信号或槽有多个重载版本,编译器无法自动推断出正确的函数指针类型。例如:

class MyClass : public QObject {
    Q_OBJECT
public:
    MyClass(QObject* parent = nullptr) : QObject(parent) {}

signals:
    void mySignal(int);
    void mySignal(const QString&); // 重载版本
};

在这种情况下,直接使用 connect 会导致编译错误,因为编译器无法确定要连接的是哪个 mySignal函数。

用法

1、对于信号有重载,槽没有重载

connect(sender, QOverload<参数类型>::of(&SenderClass::signal), receiver, &ReceiverClass::slot);

2、对于信号无重载,槽函数有重载

connect(sender, &SenderClass::signal, receiver, QOverload<参数类型>::of(&ReceiverClass::slot));

3、信号和槽都有重载

connect(sender, QOverload<参数类型>::of(&SenderClass::signal), receiver, QOverload<参数类型>::of(&ReceiverClass::slot));

简化版本

从 Qt 5.7 开始,qOverload 是 QOverload 的简化版本,语法更简洁,这是更推荐的写法。例如:

connect(sender, qOverload<int>(&SenderClass::signal), receiver, &ReceiverClass::slot);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值