2009-08-07 10 views

risposta

41

In Qt v4.5 e precedenti: No, l'ordine non è definito come si può vedere in the documentation here:

Se diversi slot sono collegate a un segnale, gli slot saranno eseguiti uno dopo l'altro, in un ordine arbitrario, quando viene emesso il segnale.

Modifica: Dalla versione 4.6 in poi questo non è più vero. Ora gli slot funzioneranno nell'ordine in cui sono collegati. Il punto pertinente the current documentation:

Se più slot sono collegati ad un segnale, verranno eseguiti i slot uno dopo l'altro, nell'ordine in cui sono stati collegati, quando il segnale viene emesso

+1

@Hossein La mia risposta è stata corretta fino alla versione 4.6 del QT. Se guardi la data della domanda (e la mia risposta), vedrai che è stata la risposta corretta quando è stata posta la domanda. Si noti che la risposta di Yaroslav fu pubblicata più di un anno dopo. – sepp2k

+1

OK, scusa, non volevo sottovalutare il tuo post. Poiché questa domanda è apparsa come il primo risultato della ricerca Google che ho fatto, volevo impedire a ulteriori lettori di confondere. – Hossein

+0

è necessario utilizzare Connessioni in coda affinché questo sia vero per diversi thread. Sto solo dicendo – smsware

2

Sebbene l'ordine non sia definito, fino ad ora, in tutte le versioni Qt è stato ordinato connect(), tranne quando viene utilizzato lo Qt::QueuedConnection, nel qual caso, ovviamente, non è nemmeno garantito che uno o tutti gli slot siano stati eseguiti quando restituisce emit. Affidarsi all'ordine è ancora scoraggiato, però.

9

Secondo Qt documentazione:

Se diversi slot sono collegati fra segnale, gli slot vengono eseguiti uno dopo l'altro, nell'ordine in cui sono stati collegati, quando il segnale è emessa.

http://qt-project.org/doc/qt-4.8/signalsandslots.html

+2

Non sbagliato. Dipende dalla versione Qt. –

0

Basandosi sulla quale ordine gli slot verranno eseguiti è una cattiva, cattiva idea, in quanto sconfigge sia lo spirito delle/connessioni slot segnali e si lascia spalancata per un comportamento indesiderato se si fa qualsiasi tipo di connessioni programmatiche di segnali & slot.

Problemi correlati