是的,一个槽函数可以被多个信号连接。只需要在使用 QObject::connect()
函数时将多个信号都指定为参数即可。
例如,在下面的示例中,我们定义了两个信号 signalA()
和 signalB()
,并将它们都连接到同一个槽函数 mySlot()
:
class MyClass : public QObject {
Q_OBJECT
public slots:
void mySlot() {
qDebug() << "Received signal";
}
signals:
void signalA();
void signalB();
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyClass obj;
// 将 signalA 和 signalB 信号都连接到 mySlot 槽函数上
QObject::connect(&obj, &MyClass::signalA, &obj, &MyClass::mySlot);
QObject::connect(&obj, &MyClass::signalB, &obj, &MyClass::mySlot);
// 触发信号
emit obj.signalA(); // 输出 "Received signal"
emit obj.signalB(); // 输出 "Received signal"
return app.exec();
}
在这个示例中,我们使用了两次 QObject::connect()
函数来将 signalA()
和 signalB()
信号分别连接到了同一个槽函数 mySlot()
上。当我们调用 emit obj.signalA()
或者emit obj.signalB()
后,都会触发 mySlot()
槽函数,并输出 “Received signal”。
需要注意的是,在使用多个信号连接同一槽函数时,如果这些信号带有不同类型的参数,那么槽函数必须能够处理所有类型的参数。如果某些信号的参数类型与槽函数不匹配,可能会导致编译错误或者运行时错误。