qt 一个信号关联了多个对象,向某个指定的对象发送信号
时间: 2023-12-22 16:05:31 浏览: 81
在 Qt 中,如果一个信号连接了多个对象的槽函数,你可以使用`QObject::sender()`函数来获取当前发射信号的对象指针,然后再根据你的需要判断是否是你想要的对象,如果是则进行处理,否则忽略该信号。
下面是一个示例代码,演示了如何向指定的对象发送信号:
```
// 定义一个信号
class MyObject : public QObject
{
Q_OBJECT
signals:
void mySignal(int value);
};
// 定义一个槽函数
class MyWidget : public QWidget
{
Q_OBJECT
public slots:
void mySlot(int value);
};
// 在代码中连接信号和槽函数
MyObject* obj1 = new MyObject();
MyWidget* widget1 = new MyWidget();
QObject::connect(obj1, SIGNAL(mySignal(int)), widget1, SLOT(mySlot(int)));
MyObject* obj2 = new MyObject();
MyWidget* widget2 = new MyWidget();
QObject::connect(obj2, SIGNAL(mySignal(int)), widget2, SLOT(mySlot(int)));
// 发出信号
obj1->emit mySignal(42);
// 在槽函数中判断信号来源
void MyWidget::mySlot(int value)
{
// 判断信号来源是否是 obj1
if (QObject::sender() == obj1)
{
// 处理 obj1 发出的信号
}
else
{
// 忽略其他来源的信号
}
}
```
在上面的示例代码中,我们定义了两个`MyObject`对象和两个`MyWidget`对象,并将两个`MyObject`对象的`mySignal`信号分别连接到了两个`MyWidget`对象的`mySlot`槽函数上。然后,我们通过调用`obj1->emit mySignal(42)`来发出信号。在`MyWidget`的`mySlot`槽函数中,我们使用`QObject::sender()`函数来获取当前发射信号的对象指针,并判断其是否为`obj1`,如果是则进行处理,否则忽略该信号。
阅读全文