信号接続されているスロット関数をどのようにQTで見つけるか
Qtでは、次のように信号に接続されたスロット関数を検索できます。
- findChild()
QObject *obj = parentObject->findChild<QObject*>("objectName");
if (obj != nullptr) {
// 找到了对象,可以通过QObject::connect()来连接信号和槽
}
- 子
QList<QObject*> children = parentObject->children();
for (QObject *child : children) {
if (child->metaObject()->indexOfSlot("slotFunctionSignature") > -1) {
// 找到了槽函数,可以通过QObject::connect()来连接信号和槽
}
}
- 送信者()
- 送信者
void MyClass::slotFunction() {
if (sender() == objectName) {
// 该槽函数连接了特定的信号
}
}
実行時にルックアップが必要になり、パフォーマンスオーバヘッドがかかる場合があるため注意が必要です。そのため、シグナルとスロット関数の接続関係は設計段階でできるだけ明確にし、過剰なルックアップ操作を避けるべきです。