qt重载的信号槽函数绑定方式

在qt中,信号槽本质都是函数,在C++中是函数就可以重载,所以有些情况下我们会对qt的信号或槽函数进行重载。
在qt5及其以后,qt的信号槽绑定是可以使用函数指针绑定,这时候我们需要进行绑定的时候,那具体是绑定的哪个函数?

比如下面例子:

//classA 信号
void sigTest();
void sigTest(int a);
void sigTest(QString a);

//classB 槽函数
void slotTest();
void slotTest(int a);
void slotTest(QString a);

//信号槽绑定
connect(class_a, &classA::sigTest, class_b, &ClassB::slotTest);

真的出现这样的情况了,可以使用下面操作选择对应的重载函数:

QOverload<const QString &>::of()

因此信号槽改为如下样式:

connect(class_a, QOverload<QString>::of(&classA::sigTest), class_b, &ClassB::slotTest);

选择重载的槽函数同理。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++中,可以使用函数指针或者函数对象来实现回调函数的建立和绑定。而在使用QT框架中,可以使用信号机制来实现回调函数的功能。 1. 使用函数指针建立回调函数: 首先,定义一个函数指针类型,该函数指针类型与回调函数函数签名相匹配。然后,将回调函数的地址赋值给函数指针变量。最后,在需要调用回调函数的地方,通过函数指针来调用回调函数。 示例代码如下: ```cpp // 定义回调函数函数签名 typedef void (*CallbackFunc)(int); // 回调函数 void callback(int data) { // 回调函数的实现 // ... } int main() { // 建立回调函数 CallbackFunc func = callback; // 调用回调函数 func(10); return 0; } ``` 2. 使用函数对象建立回调函数: 可以定义一个函数对象类,并重载函数调用运算符(operator()),使其具有类似函数的行为。然后,将函数对象作为参数传递给需要回调的函数或者类的成员函数。 示例代码如下: ```cpp // 定义函数对象类 class Callback { public: void operator()(int data) { // 回调函数的实现 // ... } }; int main() { // 建立回调函数 Callback callback; // 调用回调函数 callback(10); return 0; } ``` 3. 使用QT信号机制建立回调函数: 在QT中,可以使用信号机制来实现回调函数的功能。首先,在需要回调的类中定义一个信号,然后在另一个类中定义一个函数,并将信号函数进行连接。当信号被触发时,函数会被自动调用。 示例代码如下: ```cpp // 定义一个发送信号的类 class Sender : public QObject { Q_OBJECT signals: void dataReady(int data); }; // 定义一个接收信号的类 class Receiver : public QObject { Q_OBJECT public slots: void onDataReady(int data) { // 回调函数的实现 // ... } }; int main() { // 创建发送信号的对象和接收信号的对象 Sender sender; Receiver receiver; // 连接信号函数 QObject::connect(&sender, SIGNAL(dataReady(int)), &receiver, SLOT(onDataReady(int))); // 触发信号,调用回调函数 emit sender.dataReady(10); return 0; } ``` 以上是建立和绑定回调函数的几种常见方法。具体选择哪种方法取决于你的需求和代码结构。如果你有其他问题,请继续提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值