我想知道在对象上建立连接的位置是否重要。例如,通常我在发出可能发出信号的调用之前执行此操作,但有时如果它的节点位于(例如在调用之前不存在的 QNetworkReply)上,我必须在之后执行此操作。也许在建立连接之前我还必须进行一些检查。
在建立连接以将此信号连接到插槽之前,是否有可能发出信号?
例如:
ClassA::function() {
ClassB b;
b.someCall();
connect(&b, SIGNAL(finished()), this, SLOT(someSlot()));
}
ClassB::someCall() {
emit finished();
}
插槽会在这里调用吗?这可能不是一个非常实际的示例,因为在这种情况下您可能只使用返回值。但在某些情况下,我会这样做,例如,如果“someCall”是一个您可以跳过的例程并且它可能会失败,或者如果该例程中的网络请求失败,或者如果我们在一开始就遇到了一些错误。无论哪种方式,都应该发出“failed()”信号并有一个槽来处理任何类型的故障。例如;
ClassB::someCall() {
allocate "something"
if(something == NULL) emit finished();
QNetworkReply *reply = someNetworkAccessManager.put(something);
connect(reply, SIGNAL(finished()), this, SIGNAL(finished()));
}
所以在这里我们有一个调用,它可以立即或在一段时间后发出finished()。如果我在拨打此电话后创建连接,是否会捕获第一个 finished() ?