3つの異なる信号を発するオブジェクトがあり、これらの信号を転送するとともに、送信者を削除したいと思います。このオブジェクトは、これらの信号のエミッターとして機能する別のオブジェクトにあります。
通常、私はこのようにします:
void SomeClass::someSideFunction() {
Request* request = _StorageProvider.insert("somedata");
connect(request, SIGNAL(succeded()), this, SLOT(handleSucceded()));
connect(request, SIGNAL(failed()), this, SLOT(handleFailed()));
connect(request, SIGNAL(alreadyExists()), this, SLOT(handleAlreadyExists()));
}
void SomeClass::handleSucceded() {
Request* request = qobject_cast<Request*>(sender());
if(request != NULL) request ->deleteLater();
emit succeded();
}
void SomeClass::handleFailed() {
Request* request = qobject_cast<Request*>(sender());
if(request != NULL) request ->deleteLater();
emit failed();
}
void SomeClass::handleAlreadyExists() {
Request* request = qobject_cast<Request*>(sender());
if(request != NULL) request ->deleteLater();
emit alreadyExists();
}
これを行うためのより良い方法はありますか?「リクエスト」はstorageProviderの子ですが、親が死ぬまでリクエストを削除するのを待つだけで、多くのリクエストが発生する可能性があります。
私はこのようなある種の解決策を考えていました:
connect(request, SIGNAL(succeded()), this, SIGNAL(succeded()));
connect(request, SIGNAL(failed()), this, SIGNAL(failed()));
connect(request, SIGNAL(alreadyExists()), this, SIGNAL(alreadyExists()));
connect(request, SIGNAL(succeded()), this, SLOT(memoryHnadler()));
connect(request, SIGNAL(failed()), this, SLOT(memoryHnadler()));
connect(request, SIGNAL(alreadyExists()), this, SLOT(memoryHnadler()));
メモリハンドラーが送信者を削除する場所(存在する場合)。このアプローチの欠点は何であり、より良いものは何でしょうか?
オブジェクトは、実行時にこれらの信号の1つのみを放出することに注意してください。