赞
踩
运行在VS2022,x86,Debug下
#include <QObject> //发送者 class Sender : public QObject { Q_OBJECT //必须在类声明中包含这个宏 public: signals: void signal(); //声明信号 void sendSignal() //发射信号 { emit signal(); //通过emit关键字发射信号 } }; // 接收者 class Receiver : public QObject { Q_OBJECT public slots: void handleSignal() // 槽函数,处理信号 { qDebug() << "Signal received"; } }; int main() { Sender sender; Receiver receiver; // 将信号与槽连接起来 QObject::connect(&sender, &Sender::signal, &receiver, &Receiver::handleSignal); // 发射信号 sender.sendSignal(); return 0; }
using SlotType = void(*)(void*); //定义槽函数指针类型,参数是void*,接收任意类型的数据 // 发送者 class Sender { private: vector<SlotType> slots; //槽函数列表 public: void connect(SlotType slot) //连接信号与槽 { slots.emplace_back(slot); //将槽函数指针添加到槽列表中 } void sendSignal(void* data) //发射信号 { for (auto&& slot : slots) slot(data); //调用所有已连接的槽函数 } }; // 接收者 class Receiver { public: static void handleSignal(void* data) //槽函数,处理信号 { cout << "Signal received: " << *static_cast<int*>(data) << endl; } }; int main() { Sender sender; //将信号与槽连接起来 sender.connect(&Receiver::handleSignal); //发射信号 int signalData = 42; sender.sendSignal(&signalData); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。