C++信号与槽是Qt框架中的一个重要特性,用于实现对象间的通信。它允许一个对象(发射器)发送信号,而另一个对象(接收器)接收这个信号并做出响应。
在C++中,实现信号和槽需要使用Qt的元对象系统。首先,我们需要定义一个带有Q_OBJECT宏的类,并在其中声明信号和槽函数。例如:
class MyObject : public QObject
{
Q_OBJECT
public:
// 声明信号
signals:
void mySignal(int value);
public slots:
// 声明槽函数
void mySlot(int value);
};
上面的代码定义了一个名为MyObject的类,并声明了一个名为mySignal的信号以及一个名为mySlot的槽函数。注意到这些声明都放在了signals或slots关键字后面,并且类中还包含了Q_OBJECT宏。
接下来,在MyObject类中实现mySlot槽函数。例如:
void MyObject::mySlot(int value)
{
qDebug() << "Received signal with value: " << value;
}
最后,在某处创建MyObject对象,并连接该对象的mySignal信号到另一对象的mySlot槽函数上。例如:
MyObject *obj = new MyObject();
QObject::connect(obj, &MyObject::mySignal, obj2, &MyOtherObject::mySlot);
在上述代码中,我们首先创建了一个MyObject对象,然后将该对象的mySignal信号连接到另一个名为obj2的对象的mySlot槽函数上。
当MyObject对象调用emit mySignal(42)时,obj2中的mySlot函数将被自动调用,并且值为42将会被打印出来。