如果它在對象上進行連接的地方很重要,那麼我正在編程。例如,通常我會在發出可能發出信號的呼叫之前執行此操作,但有時如果節點處於打開狀態(例如QNetworkReply不存在,直到進行呼叫)才需要執行此操作。也許我必須在連接之前做一些檢查。連接是在哪裏進行的?
在連接這個信號到一個插槽之前,有沒有可能發出信號?
例如:
ClassA::function() {
ClassB b;
b.someCall();
connect(&b, SIGNAL(finished()), this, SLOT(someSlot()));
}
ClassB::someCall() {
emit finished();
}
請問插槽在這裏叫什麼名字?這可能不是一個非常實用的例子,因爲在這種情況下,您可能只使用返回值。但是在某些情況下,我會這樣做,例如,如果「someCall」是一個例程,您可以一步步完成並且可能失敗,或者如果該例程中的網絡請求失敗,或者一開始就出現錯誤。無論哪種方式,應該發射「失敗()」信號並且有一個插槽來處理任何類型的故障。例如;
ClassB::someCall() {
allocate "something"
if(something == NULL) emit finished();
QNetworkReply *reply = someNetworkAccessManager.put(something);
connect(reply, SIGNAL(finished()), this, SIGNAL(finished()));
}
所以在這裏我們有一個調用,它可以發出完成()幾乎直接或稍後。如果我在完成此調用後創建連接,那麼會完成第一個完成()嗎?
您的回答與所要求的內容無關。只有最後一句意思是提供一個答案,但並不是真的。你必須小心生活在另一個線程中的QObject實例。否則,與構建QObject的信號源實例建立連接有多遠並無關緊要。只要你在連接建立之前不返回到事件循環,你就沒事。 –